// -*- Mode: C++ -*-
/*******************************************************************************
Copyright (c) 1995-1998 Microsoft Corporation.  All rights reserved.

    Interface definitions for DirectAnimation components

*******************************************************************************/

#include <olectl.h> 
#include "danimid.h"

// Pick up Trident headers
import "oleidl.idl";
import "servprov.idl";

typedef IDAPickableResult *PickableResultPtr;


[
    uuid(34f681d0-3640-11cf-9294-00aa00b8a733),
    helpstring("DirectAnimation Library"),
    lcid(0x0000),
    version(1.0)
]
library DirectAnimation
{

    importlib("STDOLE32.TLB");

    interface IDAViewSite ;
    interface IDAView ;
    interface IDABehavior;
    interface IDANumber;
    interface IDABvrHook;
    interface IDADrawingSurface;
    interface IDAPickableResult;
    interface IDAEvent;

    // ====================================
    // DABehavior object definition
    // ====================================

    [
        uuid(283807B7-2C60-11d0-A31D-00AA00B92C03),
        helpstring("DirectAnimation Behavior"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        hidden,
        dual
    ]
    interface IDABehavior : IDispatch
    {
        HRESULT     GetClassName([out, retval] BSTR * pClassName);
        HRESULT     Init([in] IDABehavior *toBvr);

        HRESULT     Importance([in] double relativeImportance,
                               [out, retval] IDABehavior **ppBvr);

        HRESULT     RunOnce([out, retval] IDABehavior **bvr);

        HRESULT     SubstituteTime([in] IDANumber *xform,
                                   [out, retval] IDABehavior **bvr);

        HRESULT     SwitchTo([in] IDABehavior *switchTo);
        HRESULT     SwitchToNumber([in] double numToSwitchTo);
        HRESULT     SwitchToString([in] BSTR strToSwitchTo);

        HRESULT     Hook([in] IDABvrHook *notifier,
                         [out, retval] IDABehavior **pBvr);

        HRESULT     Duration([in] double duration,
                             [out, retval] IDABehavior **bvr);

        HRESULT     DurationAnim([in] IDANumber *duration,
                                 [out, retval] IDABehavior **bvr);

        HRESULT     Repeat([in] LONG count,
                           [out, retval] IDABehavior **bvr);

        HRESULT     RepeatForever([out, retval] IDABehavior **bvr);

        HRESULT     IsReady([in] VARIANT_BOOL bBlock,
                            [out, retval] VARIANT_BOOL *b);
    }

    // ====================================
    // DABehavior object definition
    // ====================================

    [helpstring("Bitflags for Modifiable Behaviors")]
    enum {
        DAContinueTimeline = (1L << 0),
        DASwitchFinal      = (1L << 1),
        DASwitchNextTick   = (1L << 2),
    };

    [
        uuid(9CADDC0C-AD56-11d1-9FF8-00C04FA32195),
        helpstring("DirectAnimation Behavior2"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        hidden,
        dual
    ]
    interface IDA2Behavior : IDABehavior
    {
        HRESULT     SwitchToEx([in] IDABehavior * newBvr, [in] DWORD dwFlags);
        HRESULT     ApplyPreference([in] BSTR pref,
                                    [in] VARIANT val,
                                    [out, retval] IDABehavior **bvr);

        HRESULT     ExtendedAttrib([in] BSTR arg1,
                                   [in] VARIANT arg2,
                                   [out, retval] IDABehavior **ppResult);

    }


    [helpstring("Bitflags for IDA2Image::ImageQuality")]
    typedef enum {
        DAQUAL_AA_TEXT_ON =    (1L << 0),
        DAQUAL_AA_TEXT_OFF =   (1L << 1),
        DAQUAL_AA_LINES_ON =   (1L << 2),
        DAQUAL_AA_LINES_OFF =  (1L << 3),
        DAQUAL_AA_SOLIDS_ON =  (1L << 4),
        DAQUAL_AA_SOLIDS_OFF = (1L << 5),
        DAQUAL_AA_CLIP_ON =    (1L << 6),
        DAQUAL_AA_CLIP_OFF =   (1L << 7),
        DAQUAL_MSHTML_COLORS_ON = (1L << 8),
        DAQUAL_MSHTML_COLORS_OFF = (1L << 9),
        DAQUAL_QUALITY_TRANSFORMS_ON  = (1L << 10),
        DAQUAL_QUALITY_TRANSFORMS_OFF = (1L << 11)
    } DA_IMAGE_QUALITY_FLAGS;

    [helpstring("Bitflags for IDA2View::GetInvalidatedRects")]
    typedef enum {
        DAINVRECT_MERGE_BOXES =  (1L << 0)
    } DA_INVALIDATED_RECTS_FLAGS;

    [helpstring("Enum for IDA2LineStyle::DashStyle")]

    typedef enum {
        DASHSTYLE_SOLID      = 0L,
        DASHSTYLE_DASH       = 1L,
        DASHSTYLE_DOT        = 2L,
        DASHSTYLE_DASHDOT    = 3L,
        DASHSTYLE_DASHDOTDOT = 4L,
        DASHSTYLE_NULL       = 5L,
    } DA_DASHSTYLE_ENUM;

    [helpstring("Enum for IDA2LineStyle::EndStyle")]

    typedef enum {
                ENDSTYLE_ROUND           = 0L,
                ENDSTYLE_SQUARE          = 1L,
                ENDSTYLE_FLAT            = 2L
    } DA_ENDSTYLE_ENUM;

    [helpstring("Enum for IDA2LineStyle::JoinStyle")]

    typedef enum {
                JOINSTYLE_ROUND         = 0L,
                JOINSTYLE_BEVEL         = 1L,
                JOINSTYLE_MITER         = 2L
    } DA_JOINSTYLE_ENUM;

    // ====================================
    // IDAImport interface definition
    // ====================================

    [
        uuid(FC54BEAA-5B12-11d1-8E7B-00C04FC29D46),
        helpstring("DirectAnimation Import Interface"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        dual
    ]
    interface IDAImport : IDABehavior
    {
        HRESULT     ImportStatus([out, retval] LONG * status);

        HRESULT     ImportCancel();

        [propget,
         helpstring("The import priority")]
        HRESULT     ImportPriority([out, retval] float * prio);

        [propput]
        HRESULT     ImportPriority([in] float prio);
    }

    // ====================================
    // IDAModifiableBehavior interface definition
    // ====================================

    [
        uuid(FC54BEAB-5B12-11d1-8E7B-00C04FC29D46),
        helpstring("DirectAnimation Modifiable Behavior Interface"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        dual
    ]
    interface IDAModifiableBehavior : IDABehavior
    {
        [propget,
         helpstring("The current behavior")]
        HRESULT     CurrentBehavior([out, retval] IDABehavior ** bvr);

        [propput]
        HRESULT     CurrentBehavior([in] VARIANT val);

        HRESULT     SwitchToEx([in] IDABehavior * newBvr,
                               [in] DWORD dwFlags);
    }

    //
    // coclass for DABehavior objects
    //

    [
        uuid(283807B8-2C60-11d0-A31D-00AA00B92C03),
        helpstring("DirectAnimation Behavior Object")
    ]
    coclass DABehavior
    {
        [default]         interface IDABehavior;
    };


    // ====================================
    // IDAUntilNotifier interface definition
    // ====================================

    [
        uuid(3F3DA01A-4705-11d0-8710-00C04FC29D46),
        helpstring("DirectAnimation Until Notify Callback"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        dual
    ]
    interface IDAUntilNotifier : IDispatch
    {
        HRESULT     Notify([in] IDABehavior * eventData,
                           [in] IDABehavior * curRunningBvr,
                           [in] IDAView * curView,
                           [out, retval] IDABehavior ** ppBvr);
    }

    // ====================================
    // IDABvrHook interface definition
    // ====================================

    [
        uuid(3E2487C4-8709-11d0-B177-00C04FC2A0CA),
        helpstring("DirectAnimation Bvr Callback"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        dual
    ]
    interface IDABvrHook : IUnknown
    {
        HRESULT     Notify([in] LONG id,
                           [in] VARIANT_BOOL startingPerformance,
                           [in] double startTime,
                           [in] double gTime,
                           [in] double lTime,
                           [in] IDABehavior * sampleVal,
                           [in] IDABehavior * curRunningBvr,
                           [out, retval] IDABehavior ** ppBvr);
    }

    interface IDABoolean;
    interface IDACamera;
    interface IDAColor;
    interface IDAGeometry;
    interface IDAImage;
    interface IDAMatte;
    interface IDAMicrophone;
    interface IDAMontage;
    interface IDANumber;
    interface IDAPath2;
    interface IDAPoint2;
    interface IDAPoint3;
    interface IDASound;
    interface IDAString;
    interface IDATransform2;
    interface IDATransform3;
    interface IDAVector2;
    interface IDAVector3;
    interface IDAFontStyle;
    interface IDALineStyle;
    interface IDAEndStyle;
    interface IDAJoinStyle;
    interface IDADashStyle;
    interface IDABbox2;
    interface IDABbox3;
    interface IDAPair;
    interface IDAEvent;
    interface IDAArray;
    interface IDATuple;
    interface IDAUserData;

    // ====================================
    // IDABoolean interface definition
    // ====================================

    [
        uuid(C46C1BC0-3C52-11d0-9200-848C1D000000),
        helpstring("DirectAnimation Boolean Behavior"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        hidden,
        dual
    ]
    interface IDABoolean : IDABehavior
    {
        HRESULT Extract ([out, retval] VARIANT_BOOL * ret_0) ;

    }

    // ====================================
    // IDACamera interface definition
    // ====================================

    [
        uuid(C46C1BE1-3C52-11d0-9200-848C1D000000),
        helpstring("DirectAnimation Camera Behavior"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        hidden,
        dual
    ]
    interface IDACamera : IDABehavior
    {
        HRESULT Transform ([in] IDATransform3 * xf_0, [out, retval] IDACamera * * ret_1) ;
        HRESULT Depth ([in] double depth_0, [out, retval] IDACamera * * ret_1) ;
        HRESULT DepthAnim ([in] IDANumber * depth_0, [out, retval] IDACamera * * ret_1) ;
        HRESULT DepthResolution ([in] double resolution_0, [out, retval] IDACamera * * ret_1) ;
        HRESULT DepthResolutionAnim ([in] IDANumber * resolution_0, [out, retval] IDACamera * * ret_1) ;

    }

    // ====================================
    // IDAColor interface definition
    // ====================================

    [
        uuid(C46C1BC5-3C52-11d0-9200-848C1D000000),
        helpstring("DirectAnimation Color Behavior"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        hidden,
        dual
    ]
    interface IDAColor : IDABehavior
    {
        [propget] HRESULT Red ([out, retval] IDANumber * * ret_0) ;
        [propget] HRESULT Green ([out, retval] IDANumber * * ret_0) ;
        [propget] HRESULT Blue ([out, retval] IDANumber * * ret_0) ;
        [propget] HRESULT Hue ([out, retval] IDANumber * * ret_0) ;
        [propget] HRESULT Saturation ([out, retval] IDANumber * * ret_0) ;
        [propget] HRESULT Lightness ([out, retval] IDANumber * * ret_0) ;
    }

    // ====================================
    // IDAGeometry interface definition
    // ====================================

    [
        uuid(C46C1BDF-3C52-11d0-9200-848C1D000000),
        helpstring("DirectAnimation Geometry Behavior"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        hidden,
        dual
    ]
    interface IDAGeometry : IDABehavior
    {
        HRESULT RenderSound ([in] IDAMicrophone * mic_0, [out, retval] IDASound * * ret_1) ;
        HRESULT Pickable ([out, retval] IDAPickableResult * * ret_0) ;
        HRESULT PickableOccluded ([out, retval] IDAPickableResult * * ret_0) ;
        HRESULT Undetectable ([out, retval] IDAGeometry * * ret_0) ;
        HRESULT EmissiveColor ([in] IDAColor * col_0, [out, retval] IDAGeometry * * ret_1) ;
        HRESULT DiffuseColor ([in] IDAColor * col_0, [out, retval] IDAGeometry * * ret_1) ;
        HRESULT SpecularColor ([in] IDAColor * col_0, [out, retval] IDAGeometry * * ret_1) ;
        HRESULT SpecularExponent ([in] double power_0, [out, retval] IDAGeometry * * ret_1) ;
        HRESULT SpecularExponentAnim ([in] IDANumber * power_0, [out, retval] IDAGeometry * * ret_1) ;
        HRESULT Texture ([in] IDAImage * texture_0, [out, retval] IDAGeometry * * ret_1) ;
        HRESULT Opacity ([in] double level_0, [out, retval] IDAGeometry * * ret_1) ;
        HRESULT OpacityAnim ([in] IDANumber * level_0, [out, retval] IDAGeometry * * ret_1) ;
        HRESULT Transform ([in] IDATransform3 * xf_0, [out, retval] IDAGeometry * * ret_1) ;
        [propget] HRESULT BoundingBox ([out, retval] IDABbox3 * * ret_0) ;
        HRESULT Render ([in] IDACamera * cam_0, [out, retval] IDAImage * * ret_1) ;
        HRESULT LightColor ([in] IDAColor * color_0, [out, retval] IDAGeometry * * ret_1) ;
        HRESULT LightAttenuationAnim ([in] IDANumber * constant_0, [in] IDANumber * linear_1, [in] IDANumber * quadratic_2, [out, retval] IDAGeometry * * ret_3) ;
        HRESULT LightAttenuation ([in] double constant_0, [in] double linear_1, [in] double quadratic_2, [out, retval] IDAGeometry * * ret_3) ;
    }

    // ====================================
    // IDAImage interface definition
    // ====================================

    [
        uuid(C46C1BD3-3C52-11d0-9200-848C1D000000),
        helpstring("DirectAnimation Image Behavior"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        hidden,
        dual
    ]
    interface IDAImage : IDABehavior
    {
        HRESULT Pickable ([out, retval] IDAPickableResult * * ret_0) ;
        HRESULT PickableOccluded ([out, retval] IDAPickableResult * * ret_0) ;
        HRESULT ApplyBitmapEffect ([in] IUnknown * effectToApply_0, [in] IDAEvent * firesWhenChanged_1, [out, retval] IDAImage * * ret_2) ;
        [propget] HRESULT BoundingBox ([out, retval] IDABbox2 * * ret_0) ;
        HRESULT Crop ([in] IDAPoint2 * min_0, [in] IDAPoint2 * max_1, [out, retval] IDAImage * * ret_2) ;
        HRESULT Transform ([in] IDATransform2 * xf_0, [out, retval] IDAImage * * ret_1) ;
        HRESULT OpacityAnim ([in] IDANumber * opacity_0, [out, retval] IDAImage * * ret_1) ;
        HRESULT Opacity ([in] double opacity_0, [out, retval] IDAImage * * ret_1) ;
        HRESULT Undetectable ([out, retval] IDAImage * * ret_0) ;
        HRESULT Tile ([out, retval] IDAImage * * ret_0) ;
        HRESULT Clip ([in] IDAMatte * m_0, [out, retval] IDAImage * * ret_1) ;
        HRESULT MapToUnitSquare ([out, retval] IDAImage * * ret_0) ;
        [restricted] HRESULT ClipPolygonImageEx ([in] LONG points_0size, [in,size_is(points_0size)] IDAPoint2 * points_0[], [out, retval] IDAImage * * ret_1) ;
        HRESULT ClipPolygonImage ([in] VARIANT points_0, [out, retval] IDAImage * * ret_1) ;

    }

    // ====================================
    // IDAMatte interface definition
    // ====================================

    [
        uuid(C46C1BD1-3C52-11d0-9200-848C1D000000),
        helpstring("DirectAnimation Matte Behavior"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        hidden,
        dual
    ]
    interface IDAMatte : IDABehavior
    {
        HRESULT Transform ([in] IDATransform2 * xf_0, [out, retval] IDAMatte * * ret_1) ;

    }

    // ====================================
    // IDAMicrophone interface definition
    // ====================================

    [
        uuid(C46C1BE5-3C52-11d0-9200-848C1D000000),
        helpstring("DirectAnimation Microphone Behavior"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        hidden,
        dual
    ]
    interface IDAMicrophone : IDABehavior
    {
        HRESULT Transform ([in] IDATransform3 * xf_0, [out, retval] IDAMicrophone * * ret_1) ;

    }

    // ====================================
    // IDAMontage interface definition
    // ====================================

    [
        uuid(C46C1BD5-3C52-11d0-9200-848C1D000000),
        helpstring("DirectAnimation Montage Behavior"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        hidden,
        dual
    ]
    interface IDAMontage : IDABehavior
    {
        HRESULT Render ([out, retval] IDAImage * * ret_0) ;

    }

    // ====================================
    // IDANumber interface definition
    // ====================================

    [
        uuid(9CDE7340-3C20-11d0-A330-00AA00B92C03),
        helpstring("DirectAnimation Number Behavior"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        hidden,
        dual
    ]
    interface IDANumber : IDABehavior
    {
        HRESULT Extract ([out, retval] double * ret_0) ;
        HRESULT AnimateProperty ([in] BSTR propertyPath_0, [in] BSTR scriptingLanguage_1, [in] VARIANT_BOOL invokeAsMethod_2, [in] double minUpdateInterval_3, [out, retval] IDANumber * * ret_4) ;
        HRESULT ToStringAnim ([in] IDANumber * precision_0, [out, retval] IDAString * * ret_1) ;
        HRESULT ToString ([in] double precision_0, [out, retval] IDAString * * ret_1) ;

    }

    // ====================================
    // IDAPath2 interface definition
    // ====================================

    [
        uuid(C46C1BCF-3C52-11d0-9200-848C1D000000),
        helpstring("DirectAnimation Path2 Behavior"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        hidden,
        dual
    ]
    interface IDAPath2 : IDABehavior
    {
        HRESULT Transform ([in] IDATransform2 * xf_0, [out, retval] IDAPath2 * * ret_1) ;
        HRESULT BoundingBox ([in] IDALineStyle * style_0, [out, retval] IDABbox2 * * ret_1) ;
        HRESULT Fill ([in] IDALineStyle * border_0, [in] IDAImage * fill_1, [out, retval] IDAImage * * ret_2) ;
        HRESULT Draw ([in] IDALineStyle * border_0, [out, retval] IDAImage * * ret_1) ;
        HRESULT Close ([out, retval] IDAPath2 * * ret_0) ;

    }

    // ====================================
    // IDAPoint2 interface definition
    // ====================================

    [
        uuid(C46C1BC7-3C52-11d0-9200-848C1D000000),
        helpstring("DirectAnimation Point2 Behavior"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        hidden,
        dual
    ]
    interface IDAPoint2 : IDABehavior
    {
        HRESULT AnimateControlPosition ([in] BSTR propertyPath_0, [in] BSTR scriptingLanguage_1, [in] VARIANT_BOOL invokeAsMethod_2, [in] double minUpdateInterval_3, [out, retval] IDAPoint2 * * ret_4) ;
        HRESULT AnimateControlPositionPixel ([in] BSTR propertyPath_0, [in] BSTR scriptingLanguage_1, [in] VARIANT_BOOL invokeAsMethod_2, [in] double minUpdateInterval_3, [out, retval] IDAPoint2 * * ret_4) ;
        [propget] HRESULT X ([out, retval] IDANumber * * ret_0) ;
        [propget] HRESULT Y ([out, retval] IDANumber * * ret_0) ;
        [propget] HRESULT PolarCoordAngle ([out, retval] IDANumber * * ret_0) ;
        [propget] HRESULT PolarCoordLength ([out, retval] IDANumber * * ret_0) ;
        HRESULT Transform ([in] IDATransform2 * xf_0, [out, retval] IDAPoint2 * * ret_1) ;

    }

    // ====================================
    // IDAPoint3 interface definition
    // ====================================

    [
        uuid(C46C1BD7-3C52-11d0-9200-848C1D000000),
        helpstring("DirectAnimation Point3 Behavior"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        hidden,
        dual
    ]
    interface IDAPoint3 : IDABehavior
    {
        HRESULT Project ([in] IDACamera * cam_0, [out, retval] IDAPoint2 * * ret_1) ;
        [propget] HRESULT X ([out, retval] IDANumber * * ret_0) ;
        [propget] HRESULT Y ([out, retval] IDANumber * * ret_0) ;
        [propget] HRESULT Z ([out, retval] IDANumber * * ret_0) ;
        [propget] HRESULT SphericalCoordXYAngle ([out, retval] IDANumber * * ret_0) ;
        [propget] HRESULT SphericalCoordYZAngle ([out, retval] IDANumber * * ret_0) ;
        [propget] HRESULT SphericalCoordLength ([out, retval] IDANumber * * ret_0) ;
        HRESULT Transform ([in] IDATransform3 * xf_0, [out, retval] IDAPoint3 * * ret_1) ;

    }

    // ====================================
    // IDASound interface definition
    // ====================================

    [
        uuid(C46C1BE3-3C52-11d0-9200-848C1D000000),
        helpstring("DirectAnimation Sound Behavior"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        hidden,
        dual
    ]
    interface IDASound : IDABehavior
    {
        HRESULT PhaseAnim ([in] IDANumber * phaseAmt_0, [out, retval] IDASound * * ret_1) ;
        HRESULT Phase ([in] double phaseAmt_0, [out, retval] IDASound * * ret_1) ;
        HRESULT RateAnim ([in] IDANumber * pitchShift_0, [out, retval] IDASound * * ret_1) ;
        HRESULT Rate ([in] double pitchShift_0, [out, retval] IDASound * * ret_1) ;
        HRESULT PanAnim ([in] IDANumber * panAmt_0, [out, retval] IDASound * * ret_1) ;
        HRESULT Pan ([in] double panAmt_0, [out, retval] IDASound * * ret_1) ;
        HRESULT GainAnim ([in] IDANumber * gainAmt_0, [out, retval] IDASound * * ret_1) ;
        HRESULT Gain ([in] double gainAmt_0, [out, retval] IDASound * * ret_1) ;
        HRESULT Loop ([out, retval] IDASound * * ret_0) ;

    }

    // ====================================
    // IDAString interface definition
    // ====================================

    [
        uuid(C46C1BC3-3C52-11d0-9200-848C1D000000),
        helpstring("DirectAnimation String Behavior"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        hidden,
        dual
    ]
    interface IDAString : IDABehavior
    {
        HRESULT Extract ([out, retval] BSTR * ret_0) ;
        HRESULT AnimateProperty ([in] BSTR propertyPath_0, [in] BSTR scriptingLanguage_1, [in] VARIANT_BOOL invokeAsMethod_2, [in] double minUpdateInterval_3, [out, retval] IDAString * * ret_4) ;

    }

    // ====================================
    // IDATransform2 interface definition
    // ====================================

    [
        uuid(C46C1BCB-3C52-11d0-9200-848C1D000000),
        helpstring("DirectAnimation Transform2 Behavior"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        hidden,
        dual
    ]
    interface IDATransform2 : IDABehavior
    {
        HRESULT Inverse ([out, retval] IDATransform2 * * ret_0) ;
        [propget] HRESULT IsSingular ([out, retval] IDABoolean * * ret_0) ;

    }

    // ====================================
    // IDATransform3 interface definition
    // ====================================

    [
        uuid(C46C1BDB-3C52-11d0-9200-848C1D000000),
        helpstring("DirectAnimation Transform3 Behavior"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        hidden,
        dual
    ]
    interface IDATransform3 : IDABehavior
    {
        HRESULT Inverse ([out, retval] IDATransform3 * * ret_0) ;
        [propget] HRESULT IsSingular ([out, retval] IDABoolean * * ret_0) ;
        HRESULT ParallelTransform2 ([out, retval] IDATransform2 * * ret_0) ;

    }

    // ====================================
    // IDAVector2 interface definition
    // ====================================

    [
        uuid(C46C1BC9-3C52-11d0-9200-848C1D000000),
        helpstring("DirectAnimation Vector2 Behavior"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        hidden,
        dual
    ]
    interface IDAVector2 : IDABehavior
    {
        [propget] HRESULT Length ([out, retval] IDANumber * * ret_0) ;
        [propget] HRESULT LengthSquared ([out, retval] IDANumber * * ret_0) ;
        HRESULT Normalize ([out, retval] IDAVector2 * * ret_0) ;
        HRESULT MulAnim ([in] IDANumber * scalar_0, [out, retval] IDAVector2 * * ret_1) ;
        HRESULT Mul ([in] double scalar_0, [out, retval] IDAVector2 * * ret_1) ;
        HRESULT DivAnim ([in] IDANumber * scalar_0, [out, retval] IDAVector2 * * ret_1) ;
        HRESULT Div ([in] double scalar_0, [out, retval] IDAVector2 * * ret_1) ;
        [propget] HRESULT X ([out, retval] IDANumber * * ret_0) ;
        [propget] HRESULT Y ([out, retval] IDANumber * * ret_0) ;
        [propget] HRESULT PolarCoordAngle ([out, retval] IDANumber * * ret_0) ;
        [propget] HRESULT PolarCoordLength ([out, retval] IDANumber * * ret_0) ;
        HRESULT Transform ([in] IDATransform2 * xf_0, [out, retval] IDAVector2 * * ret_1) ;

    }

    // ====================================
    // IDAVector3 interface definition
    // ====================================

    [
        uuid(C46C1BD9-3C52-11d0-9200-848C1D000000),
        helpstring("DirectAnimation Vector3 Behavior"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        hidden,
        dual
    ]
    interface IDAVector3 : IDABehavior
    {
        [propget] HRESULT Length ([out, retval] IDANumber * * ret_0) ;
        [propget] HRESULT LengthSquared ([out, retval] IDANumber * * ret_0) ;
        HRESULT Normalize ([out, retval] IDAVector3 * * ret_0) ;
        HRESULT MulAnim ([in] IDANumber * scalar_0, [out, retval] IDAVector3 * * ret_1) ;
        HRESULT Mul ([in] double scalar_0, [out, retval] IDAVector3 * * ret_1) ;
        HRESULT DivAnim ([in] IDANumber * scalar_0, [out, retval] IDAVector3 * * ret_1) ;
        HRESULT Div ([in] double scalar_0, [out, retval] IDAVector3 * * ret_1) ;
        [propget] HRESULT X ([out, retval] IDANumber * * ret_0) ;
        [propget] HRESULT Y ([out, retval] IDANumber * * ret_0) ;
        [propget] HRESULT Z ([out, retval] IDANumber * * ret_0) ;
        [propget] HRESULT SphericalCoordXYAngle ([out, retval] IDANumber * * ret_0) ;
        [propget] HRESULT SphericalCoordYZAngle ([out, retval] IDANumber * * ret_0) ;
        [propget] HRESULT SphericalCoordLength ([out, retval] IDANumber * * ret_0) ;
        HRESULT Transform ([in] IDATransform3 * xf_0, [out, retval] IDAVector3 * * ret_1) ;

    }

    // ====================================
    // IDAFontStyle interface definition
    // ====================================

    [
        uuid(25B0F91D-D23D-11d0-9B85-00C04FC2F51D),
        helpstring("DirectAnimation FontStyle Behavior"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        hidden,
        dual
    ]
    interface IDAFontStyle : IDABehavior
    {
        HRESULT Bold ([out, retval] IDAFontStyle * * ret_0) ;
        HRESULT Italic ([out, retval] IDAFontStyle * * ret_0) ;
        HRESULT Underline ([out, retval] IDAFontStyle * * ret_0) ;
        HRESULT Strikethrough ([out, retval] IDAFontStyle * * ret_0) ;
        HRESULT AntiAliasing ([in] double aaStyle_0, [out, retval] IDAFontStyle * * ret_1) ;
        HRESULT Color ([in] IDAColor * col_0, [out, retval] IDAFontStyle * * ret_1) ;
        HRESULT FamilyAnim ([in] IDAString * face_0, [out, retval] IDAFontStyle * * ret_1) ;
        HRESULT Family ([in] BSTR face_0, [out, retval] IDAFontStyle * * ret_1) ;
        HRESULT SizeAnim ([in] IDANumber * size_0, [out, retval] IDAFontStyle * * ret_1) ;
        HRESULT Size ([in] double size_0, [out, retval] IDAFontStyle * * ret_1) ;
        HRESULT Weight ([in] double weight_0, [out, retval] IDAFontStyle * * ret_1) ;
        HRESULT WeightAnim ([in] IDANumber * weight_0, [out, retval] IDAFontStyle * * ret_1) ;

    }

    // ====================================
    // IDALineStyle interface definition
    // ====================================

    [
        uuid(C46C1BF1-3C52-11d0-9200-848C1D000000),
        helpstring("DirectAnimation LineStyle Behavior"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        hidden,
        dual
    ]
    interface IDALineStyle : IDABehavior
    {
        HRESULT End ([in] IDAEndStyle * obsolete_0, [out, retval] IDALineStyle * * obsolete_1) ;
        HRESULT Join ([in] IDAJoinStyle * obsolete_0, [out, retval] IDALineStyle * * obsolete_1) ;
        HRESULT Dash ([in] IDADashStyle * obsolete_0, [out, retval] IDALineStyle * * obsolete_1) ;
        HRESULT WidthAnim ([in] IDANumber * sty_0, [out, retval] IDALineStyle * * ret_1) ;
        HRESULT width ([in] double sty_0, [out, retval] IDALineStyle * * ret_1) ;
        HRESULT AntiAliasing ([in] double aaStyle_0, [out, retval] IDALineStyle * * ret_1) ;
        HRESULT Detail ([out, retval] IDALineStyle * * ret_0) ;
        HRESULT Color ([in] IDAColor * clr_0, [out, retval] IDALineStyle * * ret_1) ;

    }

    // ====================================
    // IDAEndStyle interface definition
    // ====================================

    [
        uuid(C46C1BEB-3C52-11d0-9200-848C1D000000),
        helpstring("DirectAnimation EndStyle Behavior"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        hidden,
        dual
    ]
    interface IDAEndStyle : IDABehavior
    {

    }

    // ====================================
    // IDAJoinStyle interface definition
    // ====================================

    [
        uuid(C46C1BED-3C52-11d0-9200-848C1D000000),
        helpstring("DirectAnimation JoinStyle Behavior"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        hidden,
        dual
    ]
    interface IDAJoinStyle : IDABehavior
    {

    }

    // ====================================
    // IDADashStyle interface definition
    // ====================================

    [
        uuid(C46C1BEF-3C52-11d0-9200-848C1D000000),
        helpstring("DirectAnimation DashStyle Behavior"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        hidden,
        dual
    ]
    interface IDADashStyle : IDABehavior
    {

    }

    // ====================================
    // IDABbox2 interface definition
    // ====================================

    [
        uuid(C46C1BCD-3C52-11d0-9200-848C1D000000),
        helpstring("DirectAnimation Bbox2 Behavior"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        hidden,
        dual
    ]
    interface IDABbox2 : IDABehavior
    {
        [propget] HRESULT Min ([out, retval] IDAPoint2 * * ret_0) ;
        [propget] HRESULT Max ([out, retval] IDAPoint2 * * ret_0) ;

    }

    // ====================================
    // IDABbox3 interface definition
    // ====================================

    [
        uuid(C46C1BDD-3C52-11d0-9200-848C1D000000),
        helpstring("DirectAnimation Bbox3 Behavior"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        hidden,
        dual
    ]
    interface IDABbox3 : IDABehavior
    {
        [propget] HRESULT Min ([out, retval] IDAPoint3 * * ret_0) ;
        [propget] HRESULT Max ([out, retval] IDAPoint3 * * ret_0) ;

    }

    // ====================================
    // IDAPair interface definition
    // ====================================

    [
        uuid(C46C1BF3-3C52-11d0-9200-848C1D000000),
        helpstring("DirectAnimation Pair Behavior"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        hidden,
        dual
    ]
    interface IDAPair : IDABehavior
    {
        [propget] HRESULT First ([out, retval] IDABehavior * * ret_0) ;
        [propget] HRESULT Second ([out, retval] IDABehavior * * ret_0) ;

    }

    // ====================================
    // IDAEvent interface definition
    // ====================================

    [
        uuid(50B4791E-4731-11d0-8912-00C04FC2A0CA),
        helpstring("DirectAnimation Event Behavior"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        hidden,
        dual
    ]
    interface IDAEvent : IDABehavior
    {
        HRESULT Notify ([in] IDAUntilNotifier * notifier_0, [out, retval] IDAEvent * * ret_1) ;
        HRESULT Snapshot ([in] IDABehavior * b_0, [out, retval] IDAEvent * * ret_1) ;
        HRESULT AttachData ([in] IDABehavior * data_0, [out, retval] IDAEvent * * ret_1) ;
        HRESULT ScriptCallback ([in] BSTR scriptlet_0, [in] BSTR language_1, [out, retval] IDAEvent * * ret_2) ;

    }

    // ====================================
    // IDAArray interface definition
    // ====================================

    [
        uuid(D17506C2-6B26-11d0-8914-00C04FC2A0CA),
        helpstring("DirectAnimation Array Behavior"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        hidden,
        dual
    ]
    interface IDAArray : IDABehavior
    {
        HRESULT NthAnim ([in] IDANumber * index_0, [out, retval] IDABehavior * * ret_1) ;
        HRESULT Length ([out, retval] IDANumber * * ret_0) ;

    }

    // ====================================
    // IDATuple interface definition
    // ====================================

    [
        uuid(5DFB2650-9668-11d0-B17B-00C04FC2A0CA),
        helpstring("DirectAnimation Tuple Behavior"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        hidden,
        dual
    ]
    interface IDATuple : IDABehavior
    {
        HRESULT Nth ([in] long index_0, [out, retval] IDABehavior * * ret_1) ;
        [propget] HRESULT Length ([out, retval] long * ret_0) ;

    }

    // ====================================
    // IDAUserData interface definition
    // ====================================

    [
        uuid(AF868305-AB0B-11d0-876A-00C04FC29D46),
        helpstring("DirectAnimation Userdata Behavior"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        hidden,
        dual
    ]
    interface IDAUserData : IDABehavior
    {
        [propget] HRESULT Data ([out, retval] IUnknown * * ret_0) ;

    }



    interface IDA2Geometry;
    interface IDA2Image;
    interface IDA2FontStyle;
    interface IDA2LineStyle;
    interface IDA2Event;
    interface IDA2Array;
    interface IDA2Color;

    // ====================================
    // IDA2Geometry interface definition
    // ====================================

    [
        uuid(B90E5258-574A-11d1-8E7B-00C04FC29D46),
        helpstring("DirectAnimation Geometry Behavior"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        hidden,
        dual
    ]
    interface IDA2Geometry : IDAGeometry
    {
        HRESULT AddPickData ([in] IUnknown * id_0, [in] VARIANT_BOOL ignoresOcclusion_1, [out, retval] IDAGeometry * * ret_2) ;
        HRESULT Shadow ([in] IDAGeometry * geoContainingLights_0, [in] IDAPoint3 * planePoint_1, [in] IDAVector3 * planeNormal_2, [out, retval] IDAGeometry * * ret_3) ;
        HRESULT LightRangeAnim ([in] IDANumber * range_0, [out, retval] IDAGeometry * * ret_1) ;
        HRESULT LightRange ([in] double range_0, [out, retval] IDAGeometry * * ret_1) ;
        HRESULT BlendTextureDiffuse ([in] IDABoolean * blended_0, [out, retval] IDAGeometry * * ret_1) ;
        HRESULT AmbientColor ([in] IDAColor * color_0, [out, retval] IDAGeometry * * ret_1) ;
        HRESULT D3DRMTexture ([in] IUnknown * rmTex_0, [out, retval] IDAGeometry * * ret_1) ;
        HRESULT ModelClip ([in] IDAPoint3 * planePt_0, [in] IDAVector3 * planeVec_1, [out, retval] IDAGeometry * * ret_2) ;
        HRESULT Lighting ([in] IDABoolean * lighting_0, [out, retval] IDAGeometry * * ret_1) ;
        HRESULT TextureImage ([in] IDAImage * texture_0, [out, retval] IDAGeometry * * ret_1) ;
    }


    // ====================================
    // IDA3Geometry Interface Definition
    // ====================================

    [
        uuid (EB5093C7-56F9-11d2-88CE-00C04FA35859),
        helpstring("DirectAnimation Geometry Behavior"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        hidden,
        dual
    ]
    interface IDA3Geometry : IDA2Geometry
    {
        HRESULT Billboard ([in]          IDAVector3   *axis_0,
                           [out, retval] IDAGeometry **ret_1);
    }


    // ====================================
    // IDA2Image interface definition
    // ====================================

    [
        uuid(B90E5259-574A-11d1-8E7B-00C04FC29D46),
        helpstring("DirectAnimation Image Behavior"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        hidden,
        dual
    ]
    interface IDA2Image : IDAImage
    {
        HRESULT AddPickData ([in] IUnknown * id_0, [in] VARIANT_BOOL ignoresOcclusion_1, [out, retval] IDAImage * * ret_2) ;
        HRESULT RenderResolution ([in] long width_0, [in] long height_1, [out, retval] IDAImage * * ret_2) ;
        HRESULT ImageQuality ([in] DWORD dwQualityFlags_0, [out, retval] IDAImage * * ret_1) ;
        HRESULT ColorKey ([in] IDAColor * colorKey_0, [out, retval] IDAImage * * ret_1) ;

    }

    // ====================================
    // IDA3Image interface definition
    // ====================================

    [
        uuid(AD083DBB-5817-11d2-ABA1-00C04FD92B6B),
        helpstring("DirectAnimation Image Behavior"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        hidden,
        dual
    ]
    interface IDA3Image : IDA2Image
    {
        HRESULT TransformColorRGB ([in] IDATransform3 * xf_0, [out, retval] IDAImage * * ret_1) ;
    }

    // ====================================
    // IDA2FontStyle interface definition
    // ====================================

    [
        uuid(960D8EFF-E494-11d1-AB75-00C04FD92B6B),
        helpstring("DirectAnimation FontStyle Behavior"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        hidden,
        dual
    ]
    interface IDA2FontStyle : IDAFontStyle
    {
        HRESULT TransformCharacters ([in] IDATransform2 * transform_0, [out, retval] IDAFontStyle * * ret_1) ;

    }

    // ====================================
    // IDA2LineStyle interface definition
    // ====================================

    [
        uuid(5F00F545-DF18-11d1-AB6F-00C04FD92B6B),
        helpstring("DirectAnimation LineStyle Behavior"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        hidden,
        dual
    ]
    interface IDA2LineStyle : IDALineStyle
    {
        HRESULT DashStyle ([in] DWORD ds_enum_0, [out, retval] IDALineStyle * * ret_1) ;
        HRESULT MiterLimit ([in] double mtrlim_0, [out, retval] IDALineStyle * * ret_1) ;
        HRESULT MiterLimitAnim ([in] IDANumber * mtrlim_0, [out, retval] IDALineStyle * * ret_1) ;
        HRESULT JoinStyle ([in] DWORD js_enum_0, [out, retval] IDALineStyle * * ret_1) ;
        HRESULT EndStyle ([in] DWORD es_enum_0, [out, retval] IDALineStyle * * ret_1) ;

    }

    // ====================================
    // IDA2Event interface definition
    // ====================================

    [
        uuid(B90E525A-574A-11d1-8E7B-00C04FC29D46),
        helpstring("DirectAnimation Event Behavior"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        hidden,
        dual
    ]
    interface IDA2Event : IDAEvent
    {
        HRESULT NotifyScript ([in] BSTR scriptlet_0, [out, retval] IDAEvent * * ret_1) ;

    }


    // ====================================
    // IDA2Array interface definition
    // ====================================

    [
        uuid(2A8F0B06-BE2B-11d1-B219-00C04FC2A0CA),
        helpstring("DirectAnimation Array Behavior"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        hidden,
        dual
    ]
    interface IDA2Array : IDAArray
    {
        HRESULT AddElement ([in] IDABehavior * b_0, [in] DWORD flag_1, [out, retval] long * ret_2) ;
        HRESULT RemoveElement ([in] long i_0) ;
    }


    // ====================================
    // IDA3Array interface definition
    // ====================================

    [
        uuid(3089d9a0-4ce1-11d2-933e-00a0c9b72d4d),
        helpstring("DirectAnimation Array3"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        hidden,
        dual
    ]
    interface IDA3Array : IDA2Array
    {
        HRESULT SetElement([in] LONG index,
                           [in] IDABehavior * b,
                           [in] LONG flag) ;
        HRESULT GetElement([in] LONG index,
                           [out, retval] IDABehavior **ret);
    }

    // ====================================
    // IDA2Color interface definition
    // ====================================

    [
        uuid(28A4B924-61FE-11d2-A740-00C04F79754C),
        helpstring("DirectAnimation Color Behavior"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        hidden,
        dual
    ]
    interface IDA2Color : IDAColor
    {
          HRESULT AnimateProperty ([in] BSTR propertyPath_0, 
                                   [in] BSTR scriptingLanguage_1, 
                                   [in] VARIANT_BOOL invokeAsMethod_2, 
                                   [in] double minUpdateInterval_3, 
                                   [out, retval] IDA2Color * * ret_4) ;
    }



    // ====================================
    // DAView object definition
    // ====================================

    [
        uuid(283807B3-2C60-11d0-A31D-00AA00B92C03),
        helpstring("DirectAnimation View Site interface"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        dual
    ]
    interface IDAViewSite : IDispatch
    {
        HRESULT SetStatusText([in] BSTR StatusText);
    }


    [
        uuid(69B5BC70-9B19-11d0-9B60-00C04FC2F51D),
        helpstring("DirectAnimation View Preferences"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        dual
    ]
    interface IDAPreferences : IDispatch
    {
        HRESULT PutPreference([in] BSTR preferenceName,
                              [in] VARIANT value);
        HRESULT GetPreference([in] BSTR preferenceName,
                              [out, retval] VARIANT *value);

        // Propagate the preferences down to the view they hang off
        // of.  Note that not all preferences can be propagated
        // successfully at all times.
        HRESULT Propagate();
    }

    [
        uuid(283807B4-2C60-11d0-A31D-00AA00B92C03),
        helpstring("DirectAnimation View"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        hidden,
        dual
    ]

    interface IDAView : IDispatch
    {

        // SetSimulation time sets the time for subsequent rendering
        [propget,
         helpstring("The current simulation time.")]
        HRESULT SimulationTime([out, retval] double * simTime);

        HRESULT Tick([in] double simTime,
                     [out, retval] VARIANT_BOOL *needToRender);

        // This method Render to the given target
        HRESULT Render();

        // Add behavior that's not part of the model or notifier
        // return to the run list, the view/notifier will retrieve the
        // bvrs and run them.   The id is used to remove it from the
        // view.  Note can't use bvr for id purpose.
        HRESULT     AddBvrToRun([in] IDABehavior *bvr,
                                [out, retval] LONG *pId);

        HRESULT     RemoveRunningBvr([in] LONG id);

        HRESULT     StartModel([in] IDAImage * pImage,
                               [in] IDASound * pSound,
                               [in] double startTime);

        HRESULT     StopModel();

        [propget,
         helpstring("The window to display the view in.")]
        HRESULT     Window([out,retval] long * hwnd);

        [propput]
        HRESULT     Window([in] long hwnd);

        [propget,
         helpstring("The DirectDraw Surface to display the view in.")]
        HRESULT     IDirectDrawSurface([out,retval] IUnknown **ddsurf);

        [propput]
        HRESULT     IDirectDrawSurface([in] IUnknown *ddsurf);

        [propget,
         helpstring("The HDC to display the view in.")]
        HRESULT     DC([out,retval] HDC *dc);

        [propput]
        HRESULT     DC([in] HDC dc);

        [propget,
         helpstring("Composition mode: compose to backbuffer or directly to target")]
        HRESULT     CompositeDirectlyToTarget([out, retval] VARIANT_BOOL *composeToTarget);

        [propput]
        HRESULT     CompositeDirectlyToTarget([in] VARIANT_BOOL  composeToTarget);

        HRESULT     SetViewport([in] LONG xPos,
                                [in] LONG yPos,
                                [in] LONG w,
                                [in] LONG h);

        HRESULT     SetClipRect([in] LONG xPos,
                                [in] LONG yPos,
                                [in] LONG w,
                                [in] LONG h);

        HRESULT     RePaint([in] LONG xPos,
                            [in] LONG yPos,
                            [in] LONG w,
                            [in] LONG h);

        HRESULT     PaletteChanged([in] VARIANT_BOOL bNew);

        [propget]
        HRESULT     Site([out,retval] IDAViewSite ** pViewSite);

        [propput]
        HRESULT     Site([in] IDAViewSite * pViewSite);

        [propput]
        HRESULT     ClientSite([in] IOleClientSite * pClientSite);

        [propget]
        HRESULT     ClientSite([out,retval] IOleClientSite ** pClientSite);

        HRESULT     OnMouseMove([in] double when,
                                [in] LONG xPos, [in] LONG yPos,
                                [in] BYTE modifiers);

        HRESULT     OnMouseButton([in] double when,
                                  [in] LONG xPos, [in] LONG yPos,
                                  [in] BYTE button,
                                  [in] VARIANT_BOOL bPressed,
                                  [in] BYTE modifiers);

        HRESULT     OnKey([in] double when,
                          [in] LONG key,
                          [in] VARIANT_BOOL bPressed,
                          [in] BYTE modifiers);

        HRESULT     OnFocus([in] VARIANT_BOOL bHasFocus);

        [propget]
        HRESULT     Preferences([out, retval] IDAPreferences **prefs);

        // Just like IViewObjectEx::QueryHitPoint
        HRESULT     QueryHitPoint([in] DWORD dwAspect,
                                  [in] LPCRECT prcBounds,
                                  [in] POINT   ptLoc,
                                  [in] LONG lCloseHint,
                                  [out, retval] DWORD *pHitResult);
    }

    [helpstring("Bitflags for StartModelEx")] enum { DAAsyncFlag = 0x00000001 };

    [
        uuid(2AE71568-4B34-11d1-B1E3-00C04FC2A0CA),
        helpstring("DirectAnimation View2"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        hidden,
        dual
    ]

    interface IDA2View : IDAView
    {
        [restricted] HRESULT     QueryHitPointEx([in] LONG s,
                                                 [size_is(s)] DWORD_PTR *cookies,
                                                 [size_is(s * 5)] double *points,
                                                 [in] LPCRECT prcBounds,
                                                 [in] POINT   ptLoc,
                                                 [out, retval] LONG *hits);

        HRESULT     StartModelEx([in] IDAImage * pImage,
                                 [in] IDASound * pSound,
                                 [in] double startTime,
                                 [in] DWORD dwFlags);

        HRESULT     GetDDD3DRM([out] IUnknown **directDraw,
                               [out] IUnknown **d3drm);

        HRESULT     GetRMDevice([out] IUnknown **d3drmDevice,
                                [out] DWORD     *sequenceNumber);

        [restricted] HRESULT     GetInvalidatedRects([in] DWORD flags,
                                                     [in] LONG s,
                                                     [size_is(s)] RECT *pRects,
                                                     [out, retval] LONG *pNumRects);
    }

    // ====================================
    // IDA3View Interface
    // ====================================

    [
        uuid(d5570790-57e2-11d2-933f-00a0c9b72d4d),
        helpstring("DirectAnimation View3"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        hidden,
        dual
    ]

    interface IDA3View : IDA2View
    {
        HRESULT Pause();
        HRESULT Resume();
        HRESULT OnMouseLeave([in] double when);
        
        [propget,
         helpstring("The window to display the view in.")]
        HRESULT     Window2([out,retval] HWND * hwnd);

        [propput]
        HRESULT     Window2([in] HWND hwnd);
    }

    [
        uuid(89131312-7806-11d2-8BEE-00C04FC2F51D),
        helpstring ("DirectAnimation View Object Events")
    ]
    dispinterface _IDAViewEvents
    {
	  properties:
	  methods:
	  		[id(DISPID_VIEWEVENT_START)]                void Start();
			[id(DISPID_VIEWEVENT_STOP)]                 void Stop();
			[id(DISPID_VIEWEVENT_ONMOUSEMOVE)]          void OnMouseMove([in] double when,
                                                                         [in] LONG xPos, 
                                                                         [in] LONG yPos,
                                                                         [in] int modifiers);
			[id(DISPID_VIEWEVENT_ONMOUSEBUTTON)]        void OnMouseButton([in] double when,
                                                                           [in] LONG xPos, 
                                                                           [in] LONG yPos,
                                                                           [in] int button,
                                                                           [in] VARIANT_BOOL bPressed,
                                                                           [in] int modifiers);
			[id(DISPID_VIEWEVENT_ONKEY)]                void OnKey([in] double when,
                                                                   [in] LONG key,
                                                                   [in] VARIANT_BOOL bPressed,
                                                                   [in] int modifiers);
			[id(DISPID_VIEWEVENT_ONFOCUS)]              void OnFocus([in] VARIANT_BOOL bHasFocus);
			[id(DISPID_VIEWEVENT_PAUSE)]                void Pause();
			[id(DISPID_VIEWEVENT_RESUME)]               void Resume();
			[id(DISPID_VIEWEVENT_ERROR)]                void Error([in] long HResult, [in] BSTR ErrorString);
	};
	

    //
    // coclass for DAView objects.
    //

    [
        uuid(283807B5-2C60-11d0-A31D-00AA00B92C03),
        helpstring("DirectAnimation View Object")
    ]
    coclass DAView
    {
        [default] interface IDA3View;
        [default, source] dispinterface _IDAViewEvents;
    };

    typedef enum {DAEmpty = 0, DASolid = 1, DADash = 2} DA_DASH_STYLE;
    typedef enum {DAEndFlat = 0, DAEndSquare = 1, DAEndRound = 2} DA_END_STYLE;
    typedef enum {DAJoinBevel = 0, DAJoinRound = 1, DAJoinMiter = 2} DA_JOIN_STYLE;

    // ====================================
    // DADrawingSurface object definition
    // ====================================
    [
        uuid(BC0BFD34-D21D-11d0-9385-00C04FB6BD36),
        helpstring("DirectAnimation DrawingSurface interface"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        dual
    ]

    interface IDADrawingSurface : IDispatch
    {
        [propget]
        HRESULT     Image([out,retval] IDAImage ** img);

        [propput]
        HRESULT     LineStyle([in] IDALineStyle *ls);

        [propput]
        HRESULT     BorderStyle([in] IDALineStyle *bs);

        [propput]
        HRESULT     FontStyle([in] IDAFontStyle *fs);

        [propput]
        HRESULT     ClipMatte([in] IDAMatte *matte);

        [propput]
        HRESULT     MouseEventsEnabled([in] VARIANT_BOOL on);

        [propput]
        HRESULT     HatchFillTransparent([in] VARIANT_BOOL fillOff);

        [propget]
        HRESULT     LocalContextImage([out,retval] IDAImage ** img);

        HRESULT     Reset();

        HRESULT     Clear();

        HRESULT     SaveGraphicsState();

        HRESULT     RestoreGraphicsState();

        HRESULT     Opacity([in] double opac);

        HRESULT     OpacityAnim([in] IDANumber *opac);

        HRESULT     Crop([in] double lowerLeftX,
                         [in] double lowerLeftY,
                         [in] double upperRightX,
                         [in] double upperRightY);

        HRESULT     CropPoints([in] IDAPoint2 *min, [in] IDAPoint2 *max);

        HRESULT     Transform([in] IDATransform2 *xform);

        HRESULT     LineColor([in] IDAColor *clr);

        HRESULT     LineWidth([in] double w);

        HRESULT     LineDashStyle([in] DA_DASH_STYLE id);

        HRESULT     LineEndStyle([in] DA_END_STYLE id);

        HRESULT     LineJoinStyle([in] DA_JOIN_STYLE id);

        HRESULT     BorderColor([in] IDAColor *clr);

        HRESULT     BorderWidth([in] double w);

        HRESULT     BorderDashStyle([in] DA_DASH_STYLE id);

        HRESULT     BorderEndStyle([in] DA_END_STYLE obsolete);

        HRESULT     BorderJoinStyle([in] DA_JOIN_STYLE id);

        HRESULT     Font([in] BSTR FontFace, [in] LONG sizeInPoints,
                         [in] VARIANT_BOOL Bold, [in] VARIANT_BOOL italic,
                         [in] VARIANT_BOOL underline, [in] VARIANT_BOOL strikethrough);

        HRESULT     TextureFill([in] IDAImage *obsolete1, [in] double obsolete2, [in] double obsolete3);

        HRESULT     ImageFill([in] IDAImage *obsolete1, [in] double obsolete2, [in] double obsolete3);

        HRESULT     FillTexture([in] IDAImage *img);

        HRESULT     FillImage([in] IDAImage *img);

        HRESULT     FillStyle([in] int ID);

        HRESULT     FillColor([in] IDAColor *foreground);

        HRESULT     SecondaryFillColor([in] IDAColor *val);

        HRESULT     GradientShape([in] VARIANT pts);

        HRESULT     GradientExtent([in] double startx, [in] double starty,
                                   [in] double finishx, [in] double finishy);

        HRESULT     GradientExtentPoints([in] IDAPoint2 *startColor,
                                         [in] IDAPoint2 *stopColor);

        HRESULT     GradientRolloffPower([in] double power);

        HRESULT     GradientRolloffPowerAnim([in] IDANumber *power);

        HRESULT     FixedFillScale();
        HRESULT     HorizontalFillScale();
        HRESULT     VerticalFillScale();
        HRESULT     AutoSizeFillScale();

        [restricted] HRESULT     PolylineEx([in] LONG numPts,
                                            [in, size_is(numPts)] IDAPoint2 *pts[]);
 
        HRESULT     Polyline([in] VARIANT v);

        [restricted] HRESULT     PolygonEx([in] LONG numPts,
                                           [in, size_is(numPts)] IDAPoint2 *pts[]);

        HRESULT     Polygon([in] VARIANT v);

        HRESULT     LinePoints([in] IDAPoint2 *p1, [in] IDAPoint2 *p2);

        HRESULT     Line([in] double startX, [in] double startY,
                         [in] double endX, [in] double endY);

        HRESULT     ArcRadians([in] double xPos,
                               [in] double yPos,
                               [in] double startAngle,
                               [in] double endAngle,
                               [in] double arcWidth,
                               [in] double arcHeight);

        HRESULT     ArcDegrees([in] double xPos,
                               [in] double yPos,
                               [in] double startAngle,
                               [in] double endAngle,
                               [in] double arcWidth,
                               [in] double arcHeight);

        HRESULT     Oval([in] double xPos, [in] double yPos,
                         [in] double w, [in] double h);

        HRESULT     Rect([in] double xPos, [in] double yPos,
                         [in] double w, [in] double h);

        HRESULT     RoundRect([in] double xPos, [in] double yPos,
                              [in] double w, [in] double h,
                              [in] double arcWidth,
                              [in] double arcHeight);

        HRESULT     PieRadians([in] double xPos, [in] double yPos,
                               [in] double startAngle,
                               [in] double endAngle,
                               [in] double arcWidth,
                               [in] double arcHeight);

        HRESULT     PieDegrees([in] double xPos, [in] double yPos,
                               [in] double startAngle,
                               [in] double endAngle,
                               [in] double arcWidth,
                               [in] double arcHeight);

        HRESULT     Text([in] BSTR str,
                         [in] double xPos, [in] double yPos);

        HRESULT     TextPoint([in] BSTR str,
                              [in] IDAPoint2 *point);

        HRESULT     FillPath([in] IDAPath2 *path);

        HRESULT     DrawPath([in] IDAPath2 *path);

        HRESULT     OverlayImage([in] IDAImage *img);
    }

    [
        uuid(45393DF0-54B9-11cf-92A2-00AA00B8A733),
        helpstring("DirectAnimation Site interface"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        dual
    ]
    interface IDASite : IDispatch
    {
        HRESULT     SetStatusText([in] BSTR StatusText);
        HRESULT     ReportError([in] HRESULT hr, [in] BSTR ErrorText);
        HRESULT     ReportGC([in] VARIANT_BOOL bStarting);
    }

    [
        uuid(4A933702-E36F-11d0-9B99-00C04FC2F51D),
        helpstring("DirectAnimation Importation Result"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        dual
    ]
    interface IDAImportationResult : IDispatch
    {
        [propget, helpstring("Image from import")]
        HRESULT Image([out, retval] IDAImage **ppImage);

        [propget, helpstring("Sound from import")]
        HRESULT Sound([out, retval] IDASound **ppSound);

        [propget, helpstring("Geometry from import")]
        HRESULT Geometry([out, retval] IDAGeometry **ppGeometry);

        [propget, helpstring("Media duration in seconds")]
        HRESULT Duration([out, retval] IDANumber **ppDuration);

        [propget, helpstring("Event that fires on download completion")]
        HRESULT CompletionEvent([out, retval] IDAEvent **ppCompletionEvent);

        [propget, helpstring("Percentage progress (from 0 to 1).")]
        HRESULT Progress([out, retval] IDANumber **ppProgress);

        [propget, helpstring("Media size in bytes")]
        HRESULT Size([out, retval] IDANumber **ppSizeInBytes);
    }

    [
        uuid(BACD4D86-4A4F-11d1-9BC8-00C04FC2F51D),
        helpstring("DirectAnimation DXTransform Application Result"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        dual
    ]
    interface IDADXTransformResult : IDispatch
    {
        [propget, helpstring("Resulting geometry")]
        HRESULT OutputBvr([out, retval] IDABehavior **ppOutputBvr);

        [propget, helpstring("IDispatch of the IDXTransform")]
        HRESULT TheTransform([out, retval] IDispatch **ppTheTransform);

        [helpstring("Attach a behavior to a property of the transform.")]
        HRESULT PutBvrAsProperty([in] BSTR property,
                                 [in] IDABehavior *bvr);

    }

    [
        uuid(4A933703-E36F-11d0-9B99-00C04FC2F51D),
        helpstring("DirectAnimation Pickable Structure"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        dual
    ]
    interface IDAPickableResult : IDispatch
    {
        [propget, helpstring("The pickable image")]
        HRESULT Image([out, retval] IDAImage **ppImage);

        [propget, helpstring("The pickable geometry")]
        HRESULT Geometry([out, retval] IDAGeometry **ppGeometry);

        [propget, helpstring("Event that fires upon picking")]
        HRESULT PickEvent([out, retval] IDAEvent **ppPickEvent);
    }

    [
        uuid(542FB452-5003-11cf-92A2-00AA00B8A733),
        helpstring("DirectAnimation Statics"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        hidden,
        dual
    ]
    interface IDAStatics : IDispatch
    {
        [propget]
        HRESULT     VersionString([out, retval] BSTR *str);

        [propget]
        HRESULT     Site([out,retval] IDASite ** pSite);

        [propput]
        HRESULT     Site([in] IDASite * pSite);

        [propput]
        HRESULT     ClientSite([in] IOleClientSite * pClientSite);

        [propget]
        HRESULT     ClientSite([out,retval] IOleClientSite ** pClientSite);

        [propput]
        HRESULT     PixelConstructionMode([in] VARIANT_BOOL bMode);

        [propget]
        HRESULT     PixelConstructionMode([out,retval] VARIANT_BOOL * bMode);

        HRESULT     TriggerEvent([in] IDAEvent *event,
                                 [in] IDABehavior *data);

        HRESULT     NewDrawingSurface([out,retval] IDADrawingSurface ** pds);
        // Media importation

        HRESULT     ImportMovie([in] BSTR url,
                                [out, retval] IDAImportationResult **ppResult);
        HRESULT     ImportMovieAsync([in] BSTR url,
                                     [in] IDAImage *pImageStandIn,
                                     [in] IDASound *pSoundStandIn,
                                     [out, retval] IDAImportationResult **ppResult);

        HRESULT     ImportImage([in] BSTR url,
                                [out, retval] IDAImage **ppImage);
        HRESULT     ImportImageAsync([in] BSTR url,
                                     [in] IDAImage *pImageStandIn,
                                     [out, retval] IDAImportationResult **ppResult);

        HRESULT     ImportImageColorKey([in] BSTR url,
                                        [in] BYTE colorKeyRed,
                                        [in] BYTE colorKeyGreen,
                                        [in] BYTE colorKeyBlue,
                                        [out, retval] IDAImage **ppImage);
        HRESULT     ImportImageAsyncColorKey([in] BSTR url,
                                             [in] IDAImage *pImageStandIn,
                                             [in] BYTE colorKeyRed,
                                             [in] BYTE colorKeyGreen,
                                             [in] BYTE colorKeyBlue,
                                             [out, retval] IDAImportationResult **ppResult);

        HRESULT     ImportSound([in] BSTR url,
                                [out, retval] IDAImportationResult **ppResult);
        HRESULT     ImportSoundAsync([in] BSTR url,
                                     [in] IDASound *pSoundStandIn,
                                     [out, retval] IDAImportationResult **ppResult);

        HRESULT     ImportGeometry([in] BSTR url,
                                   [out, retval] IDAGeometry **ppGeometry);

        HRESULT     ImportGeometryAsync([in] BSTR url,
                                        [in] IDAGeometry *pGeoStandIn,
                                        [out, retval] IDAImportationResult **ppResult);

        HRESULT     ImportDirectDrawSurface([in] IUnknown *dds,
                                            [in] IDAEvent *updateEvent,
                                            [out, retval] IDAImage **ppImage);

        HRESULT     Cond([in] IDABoolean *c,
                         [in] IDABehavior *i,
                         [in] IDABehavior *e,
                         [out, retval] IDABehavior **pCondBvr);

        [restricted] HRESULT     DAArrayEx([in] LONG s,
                                           [in, size_is(s)] IDABehavior *pBvrs[],
                                           [out, retval] IDAArray **bvr);

        HRESULT     DAArray([in] VARIANT bvrs,
                            [out, retval] IDAArray **bvr);

        [restricted] HRESULT     DATupleEx([in] LONG s,
                                           [in, size_is(s)] IDABehavior *pBvrs[],
                                           [out, retval] IDATuple **bvr);

        HRESULT     DATuple([in] VARIANT bvrs,
                            [out, retval] IDATuple **bvr);

        HRESULT     ModifiableBehavior([in] IDABehavior *orig,
                                       [out, retval] IDABehavior **bvr);

        HRESULT     UninitializedArray([in] IDAArray *typeTmp,
                                       [out, retval] IDAArray **bvr);

        HRESULT     UninitializedTuple([in] IDATuple *typeTmp,
                                       [out, retval] IDATuple **bvr);

        [restricted] HRESULT     NumberBSplineEx([in] int degree,
                                                 [in] LONG numKnots,
                                                 [in, size_is(numKnots)] IDANumber *knots[],
                                                 [in] LONG numPts,
                                                 [in, size_is(numPts)] IDANumber *ctrlPts[],
                                                 [in] LONG numWts,
                                                 [in, size_is(numWts)] IDANumber *weights[],
                                                 [in] IDANumber *evaluator,
                                                 [out, retval] IDANumber **bvr);

        HRESULT     NumberBSpline([in] int degree,
                                  [in] VARIANT knots,
                                  [in] VARIANT CtrlPts,
                                  [in] VARIANT weights,
                                  [in] IDANumber *evaluator,
                                  [out, retval] IDANumber **bvr);

        [restricted] HRESULT     Point2BSplineEx([in] int degree,
                                                 [in] LONG numKnots,
                                                 [in, size_is(numKnots)] IDANumber *knots[],
                                                 [in] LONG numPts,
                                                 [in, size_is(numPts)] IDAPoint2 *ctrlPts[],
                                                 [in] LONG numWts,
                                                 [in, size_is(numWts)] IDANumber *weights[],
                                                 [in] IDANumber *evaluator,
                                                 [out, retval] IDAPoint2 **bvr);

        HRESULT     Point2BSpline([in] int degree,
                                  [in] VARIANT knots,
                                  [in] VARIANT CtrlPts,
                                  [in] VARIANT weights,
                                  [in] IDANumber *evaluator,
                                  [out, retval] IDAPoint2 **bvr);

        [restricted] HRESULT     Point3BSplineEx([in] int degree,
                                                 [in] LONG numKnots,
                                                 [in, size_is(numKnots)] IDANumber *knots[],
                                                 [in] LONG numPts,
                                                 [in, size_is(numPts)] IDAPoint3 *ctrlPts[],
                                                 [in] LONG numWts,
                                                 [in, size_is(numWts)] IDANumber *weights[],
                                                 [in] IDANumber *evaluator,
                                                 [out, retval] IDAPoint3 **bvr);

        HRESULT     Point3BSpline([in] int degree,
                                  [in] VARIANT knots,
                                  [in] VARIANT CtrlPts,
                                  [in] VARIANT weights,
                                  [in] IDANumber *evaluator,
                                  [out, retval] IDAPoint3 **bvr);

        [restricted] HRESULT     Vector2BSplineEx([in] int degree,
                                                  [in] LONG numKnots,
                                                  [in, size_is(numKnots)] IDANumber *knots[],
                                                  [in] LONG numPts,
                                                  [in, size_is(numPts)] IDAVector2 *ctrlPts[],
                                                  [in] LONG numWts,
                                                  [in, size_is(numWts)] IDANumber *weights[],
                                                  [in] IDANumber *evaluator,
                                                  [out, retval] IDAVector2 **bvr);

        HRESULT     Vector2BSpline([in] int degree,
                                   [in] VARIANT knots,
                                   [in] VARIANT CtrlPts,
                                   [in] VARIANT weights,
                                   [in] IDANumber *evaluator,
                                   [out, retval] IDAVector2 **bvr);

        [restricted] HRESULT     Vector3BSplineEx([in] int degree,
                                                  [in] LONG numKnots,
                                                  [in, size_is(numKnots)] IDANumber *knots[],
                                                  [in] LONG numPts,
                                                  [in, size_is(numPts)] IDAVector3 *ctrlPts[],
                                                  [in] LONG numWts,
                                                  [in, size_is(numWts)] IDANumber *weights[],
                                                  [in] IDANumber *evaluator,
                                                  [out, retval] IDAVector3 **bvr);

        HRESULT     Vector3BSpline([in] int degree,
                                   [in] VARIANT knots,
                                   [in] VARIANT CtrlPts,
                                   [in] VARIANT weights,
                                   [in] IDANumber *evaluator,
                                   [out, retval] IDAVector3 **bvr);

        HRESULT Pow ([in] IDANumber * a_0, [in] IDANumber * b_1, [out, retval] IDANumber * * ret_2) ;

        HRESULT Abs ([in] IDANumber * a_0, [out, retval] IDANumber * * ret_1) ;

        HRESULT Sqrt ([in] IDANumber * a_0, [out, retval] IDANumber * * ret_1) ;

        HRESULT Floor ([in] IDANumber * a_0, [out, retval] IDANumber * * ret_1) ;

        HRESULT Round ([in] IDANumber * a_0, [out, retval] IDANumber * * ret_1) ;

        HRESULT Ceiling ([in] IDANumber * a_0, [out, retval] IDANumber * * ret_1) ;

        HRESULT Asin ([in] IDANumber * a_0, [out, retval] IDANumber * * ret_1) ;

        HRESULT Acos ([in] IDANumber * a_0, [out, retval] IDANumber * * ret_1) ;

        HRESULT Atan ([in] IDANumber * a_0, [out, retval] IDANumber * * ret_1) ;

        HRESULT Sin ([in] IDANumber * a_0, [out, retval] IDANumber * * ret_1) ;

        HRESULT Cos ([in] IDANumber * a_0, [out, retval] IDANumber * * ret_1) ;

        HRESULT Tan ([in] IDANumber * a_0, [out, retval] IDANumber * * ret_1) ;

        HRESULT Exp ([in] IDANumber * a_0, [out, retval] IDANumber * * ret_1) ;

        HRESULT Ln ([in] IDANumber * a_0, [out, retval] IDANumber * * ret_1) ;

        HRESULT Log10 ([in] IDANumber * a_0, [out, retval] IDANumber * * ret_1) ;

        HRESULT ToDegrees ([in] IDANumber * a_0, [out, retval] IDANumber * * ret_1) ;

        HRESULT ToRadians ([in] IDANumber * a_0, [out, retval] IDANumber * * ret_1) ;

        HRESULT Mod ([in] IDANumber * a_0, [in] IDANumber * b_1, [out, retval] IDANumber * * ret_2) ;

        HRESULT Atan2 ([in] IDANumber * a_0, [in] IDANumber * b_1, [out, retval] IDANumber * * ret_2) ;

        HRESULT Add ([in] IDANumber * a_0, [in] IDANumber * b_1, [out, retval] IDANumber * * ret_2) ;

        HRESULT Sub ([in] IDANumber * a_0, [in] IDANumber * b_1, [out, retval] IDANumber * * ret_2) ;

        HRESULT Mul ([in] IDANumber * a_0, [in] IDANumber * b_1, [out, retval] IDANumber * * ret_2) ;

        HRESULT Div ([in] IDANumber * a_0, [in] IDANumber * b_1, [out, retval] IDANumber * * ret_2) ;

        HRESULT LT ([in] IDANumber * a_0, [in] IDANumber * b_1, [out, retval] IDABoolean * * ret_2) ;

        HRESULT LTE ([in] IDANumber * a_0, [in] IDANumber * b_1, [out, retval] IDABoolean * * ret_2) ;

        HRESULT GT ([in] IDANumber * a_0, [in] IDANumber * b_1, [out, retval] IDABoolean * * ret_2) ;

        HRESULT GTE ([in] IDANumber * a_0, [in] IDANumber * b_1, [out, retval] IDABoolean * * ret_2) ;

        HRESULT EQ ([in] IDANumber * a_0, [in] IDANumber * b_1, [out, retval] IDABoolean * * ret_2) ;

        HRESULT NE ([in] IDANumber * a_0, [in] IDANumber * b_1, [out, retval] IDABoolean * * ret_2) ;

        HRESULT Neg ([in] IDANumber * a_0, [out, retval] IDANumber * * ret_1) ;

        HRESULT InterpolateAnim ([in] IDANumber * from_0, [in] IDANumber * to_1, [in] IDANumber * duration_2, [out, retval] IDANumber * * ret_3) ;

        HRESULT Interpolate ([in] double from_0, [in] double to_1, [in] double duration_2, [out, retval] IDANumber * * ret_3) ;

        HRESULT SlowInSlowOutAnim ([in] IDANumber * from_0, [in] IDANumber * to_1, [in] IDANumber * duration_2, [in] IDANumber * sharpness_3, [out, retval] IDANumber * * ret_4) ;

        HRESULT SlowInSlowOut ([in] double from_0, [in] double to_1, [in] double duration_2, [in] double sharpness_3, [out, retval] IDANumber * * ret_4) ;

        HRESULT SoundSource ([in] IDASound * snd_0, [out, retval] IDAGeometry * * ret_1) ;

        HRESULT Mix ([in] IDASound * left_0, [in] IDASound * right_1, [out, retval] IDASound * * ret_2) ;

        HRESULT And ([in] IDABoolean * a_0, [in] IDABoolean * b_1, [out, retval] IDABoolean * * ret_2) ;

        HRESULT Or ([in] IDABoolean * a_0, [in] IDABoolean * b_1, [out, retval] IDABoolean * * ret_2) ;

        HRESULT Not ([in] IDABoolean * a_0, [out, retval] IDABoolean * * ret_1) ;

        HRESULT Integral ([in] IDANumber * b_0, [out, retval] IDANumber * * ret_1) ;

        HRESULT Derivative ([in] IDANumber * b_0, [out, retval] IDANumber * * ret_1) ;

        HRESULT IntegralVector2 ([in] IDAVector2 * v_0, [out, retval] IDAVector2 * * ret_1) ;

        HRESULT IntegralVector3 ([in] IDAVector3 * v_0, [out, retval] IDAVector3 * * ret_1) ;

        HRESULT DerivativeVector2 ([in] IDAVector2 * v_0, [out, retval] IDAVector2 * * ret_1) ;

        HRESULT DerivativeVector3 ([in] IDAVector3 * v_0, [out, retval] IDAVector3 * * ret_1) ;

        HRESULT DerivativePoint2 ([in] IDAPoint2 * v_0, [out, retval] IDAVector2 * * ret_1) ;

        HRESULT DerivativePoint3 ([in] IDAPoint3 * v_0, [out, retval] IDAVector3 * * ret_1) ;

        HRESULT KeyState ([in] IDANumber * n_0, [out, retval] IDABoolean * * ret_1) ;

        HRESULT KeyUp ([in] LONG arg_0, [out, retval] IDAEvent * * ret_1) ;

        HRESULT KeyDown ([in] LONG arg_0, [out, retval] IDAEvent * * ret_1) ;

        HRESULT DANumber ([in] double num_0, [out, retval] IDANumber * * ret_1) ;

        HRESULT DAString ([in] BSTR str_0, [out, retval] IDAString * * ret_1) ;

        HRESULT DABoolean ([in] VARIANT_BOOL num_0, [out, retval] IDABoolean * * ret_1) ;

        HRESULT SeededRandom ([in] double arg_0, [out, retval] IDANumber * * ret_1) ;

        [propget] HRESULT MousePosition ([out, retval] IDAPoint2 * * ret_0) ;

        [propget] HRESULT LeftButtonState ([out, retval] IDABoolean * * ret_0) ;

        [propget] HRESULT RightButtonState ([out, retval] IDABoolean * * ret_0) ;

        [propget] HRESULT DATrue ([out, retval] IDABoolean * * ret_0) ;

        [propget] HRESULT DAFalse ([out, retval] IDABoolean * * ret_0) ;

        [propget] HRESULT LocalTime ([out, retval] IDANumber * * ret_0) ;

        [propget] HRESULT GlobalTime ([out, retval] IDANumber * * ret_0) ;

        [propget] HRESULT Pixel ([out, retval] IDANumber * * ret_0) ;

        HRESULT UserData ([in] IUnknown * data_0, [out, retval] IDAUserData * * ret_1) ;

        HRESULT UntilNotify ([in] IDABehavior * b0_0, [in] IDAEvent * event_1, [in] IDAUntilNotifier * notifier_2, [out, retval] IDABehavior * * ret_3) ;

        HRESULT Until ([in] IDABehavior * b0_0, [in] IDAEvent * event_1, [in] IDABehavior * b1_2, [out, retval] IDABehavior * * ret_3) ;

        HRESULT UntilEx ([in] IDABehavior * b0_0, [in] IDAEvent * event_1, [out, retval] IDABehavior * * ret_2) ;

        HRESULT Sequence ([in] IDABehavior * s1_0, [in] IDABehavior * s2_1, [out, retval] IDABehavior * * ret_2) ;

        HRESULT FollowPath ([in] IDAPath2 * path_0, [in] double duration_1, [out, retval] IDATransform2 * * ret_2) ;

        HRESULT FollowPathAngle ([in] IDAPath2 * path_0, [in] double duration_1, [out, retval] IDATransform2 * * ret_2) ;

        HRESULT FollowPathAngleUpright ([in] IDAPath2 * path_0, [in] double duration_1, [out, retval] IDATransform2 * * ret_2) ;

        HRESULT FollowPathEval ([in] IDAPath2 * path_0, [in] IDANumber * eval_1, [out, retval] IDATransform2 * * ret_2) ;

        HRESULT FollowPathAngleEval ([in] IDAPath2 * path_0, [in] IDANumber * eval_1, [out, retval] IDATransform2 * * ret_2) ;

        HRESULT FollowPathAngleUprightEval ([in] IDAPath2 * path_0, [in] IDANumber * eval_1, [out, retval] IDATransform2 * * ret_2) ;

        HRESULT FollowPathAnim ([in] IDAPath2 * obsoleted1_0, [in] IDANumber * obsoleted2_1, [out, retval] IDATransform2 * * ret_2) ;

        HRESULT FollowPathAngleAnim ([in] IDAPath2 * obsoleted1_0, [in] IDANumber * obsoleted2_1, [out, retval] IDATransform2 * * ret_2) ;

        HRESULT FollowPathAngleUprightAnim ([in] IDAPath2 * obsoleted1_0, [in] IDANumber * obsoleted2_1, [out, retval] IDATransform2 * * ret_2) ;

        HRESULT ConcatString ([in] IDAString * s1_0, [in] IDAString * s2_1, [out, retval] IDAString * * ret_2) ;

        HRESULT PerspectiveCamera ([in] double focalDist_0, [in] double nearClip_1, [out, retval] IDACamera * * ret_2) ;

        HRESULT PerspectiveCameraAnim ([in] IDANumber * focalDist_0, [in] IDANumber * nearClip_1, [out, retval] IDACamera * * ret_2) ;

        HRESULT ParallelCamera ([in] double nearClip_0, [out, retval] IDACamera * * ret_1) ;

        HRESULT ParallelCameraAnim ([in] IDANumber * nearClip_0, [out, retval] IDACamera * * ret_1) ;

        HRESULT ColorRgbAnim ([in] IDANumber * red_0, [in] IDANumber * green_1, [in] IDANumber * blue_2, [out, retval] IDAColor * * ret_3) ;

        HRESULT ColorRgb ([in] double red_0, [in] double green_1, [in] double blue_2, [out, retval] IDAColor * * ret_3) ;

        HRESULT ColorRgb255 ([in] short red_0, [in] short green_1, [in] short blue_2, [out, retval] IDAColor * * ret_3) ;

        HRESULT ColorHsl ([in] double hue_0, [in] double saturation_1, [in] double lum_2, [out, retval] IDAColor * * ret_3) ;

        HRESULT ColorHslAnim ([in] IDANumber * hue_0, [in] IDANumber * saturation_1, [in] IDANumber * lum_2, [out, retval] IDAColor * * ret_3) ;

        [propget] HRESULT Red ([out, retval] IDAColor * * ret_0) ;

        [propget] HRESULT Green ([out, retval] IDAColor * * ret_0) ;

        [propget] HRESULT Blue ([out, retval] IDAColor * * ret_0) ;

        [propget] HRESULT Cyan ([out, retval] IDAColor * * ret_0) ;

        [propget] HRESULT Magenta ([out, retval] IDAColor * * ret_0) ;

        [propget] HRESULT Yellow ([out, retval] IDAColor * * ret_0) ;

        [propget] HRESULT Black ([out, retval] IDAColor * * ret_0) ;

        [propget] HRESULT White ([out, retval] IDAColor * * ret_0) ;

        [propget] HRESULT Aqua ([out, retval] IDAColor * * ret_0) ;

        [propget] HRESULT Fuchsia ([out, retval] IDAColor * * ret_0) ;

        [propget] HRESULT Gray ([out, retval] IDAColor * * ret_0) ;

        [propget] HRESULT Lime ([out, retval] IDAColor * * ret_0) ;

        [propget] HRESULT Maroon ([out, retval] IDAColor * * ret_0) ;

        [propget] HRESULT Navy ([out, retval] IDAColor * * ret_0) ;

        [propget] HRESULT Olive ([out, retval] IDAColor * * ret_0) ;

        [propget] HRESULT Purple ([out, retval] IDAColor * * ret_0) ;

        [propget] HRESULT Silver ([out, retval] IDAColor * * ret_0) ;

        [propget] HRESULT Teal ([out, retval] IDAColor * * ret_0) ;

        HRESULT Predicate ([in] IDABoolean * b_0, [out, retval] IDAEvent * * ret_1) ;

        HRESULT NotEvent ([in] IDAEvent * event_0, [out, retval] IDAEvent * * ret_1) ;

        HRESULT AndEvent ([in] IDAEvent * e1_0, [in] IDAEvent * e2_1, [out, retval] IDAEvent * * ret_2) ;

        HRESULT OrEvent ([in] IDAEvent * e1_0, [in] IDAEvent * e2_1, [out, retval] IDAEvent * * ret_2) ;

        HRESULT ThenEvent ([in] IDAEvent * e1_0, [in] IDAEvent * e2_1, [out, retval] IDAEvent * * ret_2) ;

        [propget] HRESULT LeftButtonDown ([out, retval] IDAEvent * * ret_0) ;

        [propget] HRESULT LeftButtonUp ([out, retval] IDAEvent * * ret_0) ;

        [propget] HRESULT RightButtonDown ([out, retval] IDAEvent * * ret_0) ;

        [propget] HRESULT RightButtonUp ([out, retval] IDAEvent * * ret_0) ;

        [propget] HRESULT Always ([out, retval] IDAEvent * * ret_0) ;

        [propget] HRESULT Never ([out, retval] IDAEvent * * ret_0) ;

        HRESULT TimerAnim ([in] IDANumber * n_0, [out, retval] IDAEvent * * ret_1) ;

        HRESULT Timer ([in] double n_0, [out, retval] IDAEvent * * ret_1) ;

        HRESULT AppTriggeredEvent ([out, retval] IDAEvent * * ret_0) ;

        HRESULT ScriptCallback ([in] BSTR obsolete1_0, [in] IDAEvent * obsolete2_1, [in] BSTR obsolete3_2, [out, retval] IDAEvent * * ret_3) ;

        [propget] HRESULT EmptyGeometry ([out, retval] IDAGeometry * * ret_0) ;

        HRESULT UnionGeometry ([in] IDAGeometry * g1_0, [in] IDAGeometry * g2_1, [out, retval] IDAGeometry * * ret_2) ;

        [restricted] HRESULT UnionGeometryArrayEx ([in] LONG imgs_0size, [in,size_is(imgs_0size)] IDAGeometry * imgs_0[], [out, retval] IDAGeometry * * ret_1) ;

        HRESULT UnionGeometryArray ([in] VARIANT imgs_0, [out, retval] IDAGeometry * * ret_1) ;

        [propget] HRESULT EmptyImage ([out, retval] IDAImage * * ret_0) ;

        [propget] HRESULT DetectableEmptyImage ([out, retval] IDAImage * * ret_0) ;

        HRESULT SolidColorImage ([in] IDAColor * col_0, [out, retval] IDAImage * * ret_1) ;

        [restricted] HRESULT GradientPolygonEx ([in] LONG points_0size, [in,size_is(points_0size)] IDAPoint2 * points_0[], [in] LONG colors_1size, [in,size_is(colors_1size)] IDAColor * colors_1[], [out, retval] IDAImage * * ret_2) ;

        HRESULT GradientPolygon ([in] VARIANT points_0, [in] VARIANT colors_1, [out, retval] IDAImage * * ret_2) ;

        [restricted] HRESULT RadialGradientPolygonEx ([in] IDAColor * inner_0, [in] IDAColor * outer_1, [in] LONG points_2size, [in,size_is(points_2size)] IDAPoint2 * points_2[], [in] double fallOff_3, [out, retval] IDAImage * * ret_4) ;

        HRESULT RadialGradientPolygon ([in] IDAColor * inner_0, [in] IDAColor * outer_1, [in] VARIANT points_2, [in] double fallOff_3, [out, retval] IDAImage * * ret_4) ;

        [restricted] HRESULT RadialGradientPolygonAnimEx ([in] IDAColor * inner_0, [in] IDAColor * outer_1, [in] LONG points_2size, [in,size_is(points_2size)] IDAPoint2 * points_2[], [in] IDANumber * fallOff_3, [out, retval] IDAImage * * ret_4) ;

        HRESULT RadialGradientPolygonAnim ([in] IDAColor * inner_0, [in] IDAColor * outer_1, [in] VARIANT points_2, [in] IDANumber * fallOff_3, [out, retval] IDAImage * * ret_4) ;

        HRESULT GradientSquare ([in] IDAColor * lowerLeft_0, [in] IDAColor * upperLeft_1, [in] IDAColor * upperRight_2, [in] IDAColor * lowerRight_3, [out, retval] IDAImage * * ret_4) ;

        HRESULT RadialGradientSquare ([in] IDAColor * inner_0, [in] IDAColor * outer_1, [in] double fallOff_2, [out, retval] IDAImage * * ret_3) ;

        HRESULT RadialGradientSquareAnim ([in] IDAColor * inner_0, [in] IDAColor * outer_1, [in] IDANumber * fallOff_2, [out, retval] IDAImage * * ret_3) ;

        HRESULT RadialGradientRegularPoly ([in] IDAColor * inner_0, [in] IDAColor * outer_1, [in] double numEdges_2, [in] double fallOff_3, [out, retval] IDAImage * * ret_4) ;

        HRESULT RadialGradientRegularPolyAnim ([in] IDAColor * inner_0, [in] IDAColor * outer_1, [in] IDANumber * numEdges_2, [in] IDANumber * fallOff_3, [out, retval] IDAImage * * ret_4) ;

        HRESULT GradientHorizontal ([in] IDAColor * start_0, [in] IDAColor * stop_1, [in] double fallOff_2, [out, retval] IDAImage * * ret_3) ;

        HRESULT GradientHorizontalAnim ([in] IDAColor * start_0, [in] IDAColor * stop_1, [in] IDANumber * fallOff_2, [out, retval] IDAImage * * ret_3) ;

        HRESULT HatchHorizontal ([in] IDAColor * lineClr_0, [in] double spacing_1, [out, retval] IDAImage * * ret_2) ;

        HRESULT HatchHorizontalAnim ([in] IDAColor * lineClr_0, [in] IDANumber * spacing_1, [out, retval] IDAImage * * ret_2) ;

        HRESULT HatchVertical ([in] IDAColor * lineClr_0, [in] double spacing_1, [out, retval] IDAImage * * ret_2) ;

        HRESULT HatchVerticalAnim ([in] IDAColor * lineClr_0, [in] IDANumber * spacing_1, [out, retval] IDAImage * * ret_2) ;

        HRESULT HatchForwardDiagonal ([in] IDAColor * lineClr_0, [in] double spacing_1, [out, retval] IDAImage * * ret_2) ;

        HRESULT HatchForwardDiagonalAnim ([in] IDAColor * lineClr_0, [in] IDANumber * spacing_1, [out, retval] IDAImage * * ret_2) ;

        HRESULT HatchBackwardDiagonal ([in] IDAColor * lineClr_0, [in] double spacing_1, [out, retval] IDAImage * * ret_2) ;

        HRESULT HatchBackwardDiagonalAnim ([in] IDAColor * lineClr_0, [in] IDANumber * spacing_1, [out, retval] IDAImage * * ret_2) ;

        HRESULT HatchCross ([in] IDAColor * lineClr_0, [in] double spacing_1, [out, retval] IDAImage * * ret_2) ;

        HRESULT HatchCrossAnim ([in] IDAColor * lineClr_0, [in] IDANumber * spacing_1, [out, retval] IDAImage * * ret_2) ;

        HRESULT HatchDiagonalCross ([in] IDAColor * lineClr_0, [in] double spacing_1, [out, retval] IDAImage * * ret_2) ;

        HRESULT HatchDiagonalCrossAnim ([in] IDAColor * lineClr_0, [in] IDANumber * spacing_1, [out, retval] IDAImage * * ret_2) ;

        HRESULT Overlay ([in] IDAImage * top_0, [in] IDAImage * bottom_1, [out, retval] IDAImage * * ret_2) ;

        [restricted] HRESULT OverlayArrayEx ([in] LONG imgs_0size, [in,size_is(imgs_0size)] IDAImage * imgs_0[], [out, retval] IDAImage * * ret_1) ;

        HRESULT OverlayArray ([in] VARIANT imgs_0, [out, retval] IDAImage * * ret_1) ;

        [propget] HRESULT AmbientLight ([out, retval] IDAGeometry * * ret_0) ;

        [propget] HRESULT DirectionalLight ([out, retval] IDAGeometry * * ret_0) ;

        [propget] HRESULT PointLight ([out, retval] IDAGeometry * * ret_0) ;

        HRESULT SpotLightAnim ([in] IDANumber * fullcone_0, [in] IDANumber * cutoff_1, [out, retval] IDAGeometry * * ret_2) ;

        HRESULT SpotLight ([in] IDANumber * fullcone_0, [in] double cutoff_1, [out, retval] IDAGeometry * * ret_2) ;

        [propget] HRESULT DefaultLineStyle ([out, retval] IDALineStyle * * ret_0) ;

        [propget] HRESULT EmptyLineStyle ([out, retval] IDALineStyle * * ret_0) ;

        [propget] HRESULT JoinStyleBevel ([out, retval] IDAJoinStyle * * ret_0) ;

        [propget] HRESULT JoinStyleRound ([out, retval] IDAJoinStyle * * ret_0) ;

        [propget] HRESULT JoinStyleMiter ([out, retval] IDAJoinStyle * * ret_0) ;

        [propget] HRESULT EndStyleFlat ([out, retval] IDAEndStyle * * ret_0) ;

        [propget] HRESULT EndStyleSquare ([out, retval] IDAEndStyle * * ret_0) ;

        [propget] HRESULT EndStyleRound ([out, retval] IDAEndStyle * * ret_0) ;

        [propget] HRESULT DashStyleSolid ([out, retval] IDADashStyle * * ret_0) ;

        [propget] HRESULT DashStyleDashed ([out, retval] IDADashStyle * * ret_0) ;

        [propget] HRESULT DefaultMicrophone ([out, retval] IDAMicrophone * * ret_0) ;

        [propget] HRESULT OpaqueMatte ([out, retval] IDAMatte * * ret_0) ;

        [propget] HRESULT ClearMatte ([out, retval] IDAMatte * * ret_0) ;

        HRESULT UnionMatte ([in] IDAMatte * m1_0, [in] IDAMatte * m2_1, [out, retval] IDAMatte * * ret_2) ;

        HRESULT IntersectMatte ([in] IDAMatte * m1_0, [in] IDAMatte * m2_1, [out, retval] IDAMatte * * ret_2) ;

        HRESULT DifferenceMatte ([in] IDAMatte * m1_0, [in] IDAMatte * m2_1, [out, retval] IDAMatte * * ret_2) ;

        HRESULT FillMatte ([in] IDAPath2 * p_0, [out, retval] IDAMatte * * ret_1) ;

        HRESULT TextMatte ([in] IDAString * str_0, [in] IDAFontStyle * fs_1, [out, retval] IDAMatte * * ret_2) ;

        [propget] HRESULT EmptyMontage ([out, retval] IDAMontage * * ret_0) ;

        HRESULT ImageMontage ([in] IDAImage * im_0, [in] double depth_1, [out, retval] IDAMontage * * ret_2) ;

        HRESULT ImageMontageAnim ([in] IDAImage * im_0, [in] IDANumber * depth_1, [out, retval] IDAMontage * * ret_2) ;

        HRESULT UnionMontage ([in] IDAMontage * m1_0, [in] IDAMontage * m2_1, [out, retval] IDAMontage * * ret_2) ;

        HRESULT Concat ([in] IDAPath2 * p1_0, [in] IDAPath2 * p2_1, [out, retval] IDAPath2 * * ret_2) ;

        [restricted] HRESULT ConcatArrayEx ([in] LONG paths_0size, [in,size_is(paths_0size)] IDAPath2 * paths_0[], [out, retval] IDAPath2 * * ret_1) ;

        HRESULT ConcatArray ([in] VARIANT paths_0, [out, retval] IDAPath2 * * ret_1) ;

        HRESULT Line ([in] IDAPoint2 * p1_0, [in] IDAPoint2 * p2_1, [out, retval] IDAPath2 * * ret_2) ;

        HRESULT Ray ([in] IDAPoint2 * pt_0, [out, retval] IDAPath2 * * ret_1) ;

        HRESULT StringPathAnim ([in] IDAString * str_0, [in] IDAFontStyle * fs_1, [out, retval] IDAPath2 * * ret_2) ;

        HRESULT StringPath ([in] BSTR str_0, [in] IDAFontStyle * fs_1, [out, retval] IDAPath2 * * ret_2) ;

        [restricted] HRESULT PolylineEx ([in] LONG points_0size, [in,size_is(points_0size)] IDAPoint2 * points_0[], [out, retval] IDAPath2 * * ret_1) ;

        HRESULT Polyline ([in] VARIANT points_0, [out, retval] IDAPath2 * * ret_1) ;

        [restricted] HRESULT PolydrawPathEx ([in] LONG points_0size, [in,size_is(points_0size)] IDAPoint2 * points_0[], [in] LONG codes_1size, [in,size_is(codes_1size)] IDANumber * codes_1[], [out, retval] IDAPath2 * * ret_2) ;

        HRESULT PolydrawPath ([in] VARIANT points_0, [in] VARIANT codes_1, [out, retval] IDAPath2 * * ret_2) ;

        HRESULT ArcRadians ([in] double startAngle_0, [in] double endAngle_1, [in] double arcWidth_2, [in] double arcHeight_3, [out, retval] IDAPath2 * * ret_4) ;

        HRESULT ArcRadiansAnim ([in] IDANumber * startAngle_0, [in] IDANumber * endAngle_1, [in] IDANumber * arcWidth_2, [in] IDANumber * arcHeight_3, [out, retval] IDAPath2 * * ret_4) ;

        HRESULT ArcDegrees ([in] double startAngle_0, [in] double endAngle_1, [in] double arcWidth_2, [in] double arcHeight_3, [out, retval] IDAPath2 * * ret_4) ;

        HRESULT PieRadians ([in] double startAngle_0, [in] double endAngle_1, [in] double arcWidth_2, [in] double arcHeight_3, [out, retval] IDAPath2 * * ret_4) ;

        HRESULT PieRadiansAnim ([in] IDANumber * startAngle_0, [in] IDANumber * endAngle_1, [in] IDANumber * arcWidth_2, [in] IDANumber * arcHeight_3, [out, retval] IDAPath2 * * ret_4) ;

        HRESULT PieDegrees ([in] double startAngle_0, [in] double endAngle_1, [in] double arcWidth_2, [in] double arcHeight_3, [out, retval] IDAPath2 * * ret_4) ;

        HRESULT Oval ([in] double width_0, [in] double height_1, [out, retval] IDAPath2 * * ret_2) ;

        HRESULT OvalAnim ([in] IDANumber * width_0, [in] IDANumber * height_1, [out, retval] IDAPath2 * * ret_2) ;

        HRESULT Rect ([in] double width_0, [in] double height_1, [out, retval] IDAPath2 * * ret_2) ;

        HRESULT RectAnim ([in] IDANumber * width_0, [in] IDANumber * height_1, [out, retval] IDAPath2 * * ret_2) ;

        HRESULT RoundRect ([in] double width_0, [in] double height_1, [in] double cornerArcWidth_2, [in] double cornerArcHeight_3, [out, retval] IDAPath2 * * ret_4) ;

        HRESULT RoundRectAnim ([in] IDANumber * width_0, [in] IDANumber * height_1, [in] IDANumber * cornerArcWidth_2, [in] IDANumber * cornerArcHeight_3, [out, retval] IDAPath2 * * ret_4) ;

        [restricted] HRESULT CubicBSplinePathEx ([in] LONG points_0size, [in,size_is(points_0size)] IDAPoint2 * points_0[], [in] LONG knots_1size, [in,size_is(knots_1size)] IDANumber * knots_1[], [out, retval] IDAPath2 * * ret_2) ;

        HRESULT CubicBSplinePath ([in] VARIANT points_0, [in] VARIANT knots_1, [out, retval] IDAPath2 * * ret_2) ;

        HRESULT TextPath ([in] IDAString * obsolete1_0, [in] IDAFontStyle * obsolete2_1, [out, retval] IDAPath2 * * ret_2) ;

        [propget] HRESULT Silence ([out, retval] IDASound * * ret_0) ;

        [restricted] HRESULT MixArrayEx ([in] LONG snds_0size, [in,size_is(snds_0size)] IDASound * snds_0[], [out, retval] IDASound * * ret_1) ;

        HRESULT MixArray ([in] VARIANT snds_0, [out, retval] IDASound * * ret_1) ;

        [propget] HRESULT SinSynth ([out, retval] IDASound * * ret_0) ;

        [propget] HRESULT DefaultFont ([out, retval] IDAFontStyle * * ret_0) ;

        HRESULT FontAnim ([in] IDAString * str_0, [in] IDANumber * size_1, [in] IDAColor * col_2, [out, retval] IDAFontStyle * * ret_3) ;

        HRESULT Font ([in] BSTR str_0, [in] double size_1, [in] IDAColor * col_2, [out, retval] IDAFontStyle * * ret_3) ;

        HRESULT StringImageAnim ([in] IDAString * str_0, [in] IDAFontStyle * fs_1, [out, retval] IDAImage * * ret_2) ;

        HRESULT StringImage ([in] BSTR str_0, [in] IDAFontStyle * fs_1, [out, retval] IDAImage * * ret_2) ;

        HRESULT TextImageAnim ([in] IDAString * obsoleted1_0, [in] IDAFontStyle * obsoleted2_1, [out, retval] IDAImage * * ret_2) ;

        HRESULT TextImage ([in] BSTR obsoleted1_0, [in] IDAFontStyle * obsoleted2_1, [out, retval] IDAImage * * ret_2) ;

        [propget] HRESULT XVector2 ([out, retval] IDAVector2 * * ret_0) ;

        [propget] HRESULT YVector2 ([out, retval] IDAVector2 * * ret_0) ;

        [propget] HRESULT ZeroVector2 ([out, retval] IDAVector2 * * ret_0) ;

        [propget] HRESULT Origin2 ([out, retval] IDAPoint2 * * ret_0) ;

        HRESULT Vector2Anim ([in] IDANumber * x_0, [in] IDANumber * y_1, [out, retval] IDAVector2 * * ret_2) ;

        HRESULT Vector2 ([in] double x_0, [in] double y_1, [out, retval] IDAVector2 * * ret_2) ;

        HRESULT Point2Anim ([in] IDANumber * x_0, [in] IDANumber * y_1, [out, retval] IDAPoint2 * * ret_2) ;

        HRESULT Point2 ([in] double x_0, [in] double y_1, [out, retval] IDAPoint2 * * ret_2) ;

        HRESULT Vector2PolarAnim ([in] IDANumber * theta_0, [in] IDANumber * radius_1, [out, retval] IDAVector2 * * ret_2) ;

        HRESULT Vector2Polar ([in] double theta_0, [in] double radius_1, [out, retval] IDAVector2 * * ret_2) ;

        HRESULT Vector2PolarDegrees ([in] double theta_0, [in] double radius_1, [out, retval] IDAVector2 * * ret_2) ;

        HRESULT Point2PolarAnim ([in] IDANumber * theta_0, [in] IDANumber * radius_1, [out, retval] IDAPoint2 * * ret_2) ;

        HRESULT Point2Polar ([in] double theta_0, [in] double radius_1, [out, retval] IDAPoint2 * * ret_2) ;

        HRESULT DotVector2 ([in] IDAVector2 * v_0, [in] IDAVector2 * u_1, [out, retval] IDANumber * * ret_2) ;

        HRESULT NegVector2 ([in] IDAVector2 * v_0, [out, retval] IDAVector2 * * ret_1) ;

        HRESULT SubVector2 ([in] IDAVector2 * v1_0, [in] IDAVector2 * v2_1, [out, retval] IDAVector2 * * ret_2) ;

        HRESULT AddVector2 ([in] IDAVector2 * v1_0, [in] IDAVector2 * v2_1, [out, retval] IDAVector2 * * ret_2) ;

        HRESULT AddPoint2Vector ([in] IDAPoint2 * p_0, [in] IDAVector2 * v_1, [out, retval] IDAPoint2 * * ret_2) ;

        HRESULT SubPoint2Vector ([in] IDAPoint2 * p_0, [in] IDAVector2 * v_1, [out, retval] IDAPoint2 * * ret_2) ;

        HRESULT SubPoint2 ([in] IDAPoint2 * p1_0, [in] IDAPoint2 * p2_1, [out, retval] IDAVector2 * * ret_2) ;

        HRESULT DistancePoint2 ([in] IDAPoint2 * p_0, [in] IDAPoint2 * q_1, [out, retval] IDANumber * * ret_2) ;

        HRESULT DistanceSquaredPoint2 ([in] IDAPoint2 * p_0, [in] IDAPoint2 * q_1, [out, retval] IDANumber * * ret_2) ;

        [propget] HRESULT XVector3 ([out, retval] IDAVector3 * * ret_0) ;

        [propget] HRESULT YVector3 ([out, retval] IDAVector3 * * ret_0) ;

        [propget] HRESULT ZVector3 ([out, retval] IDAVector3 * * ret_0) ;

        [propget] HRESULT ZeroVector3 ([out, retval] IDAVector3 * * ret_0) ;

        [propget] HRESULT Origin3 ([out, retval] IDAPoint3 * * ret_0) ;

        HRESULT Vector3Anim ([in] IDANumber * x_0, [in] IDANumber * y_1, [in] IDANumber * z_2, [out, retval] IDAVector3 * * ret_3) ;

        HRESULT Vector3 ([in] double x_0, [in] double y_1, [in] double z_2, [out, retval] IDAVector3 * * ret_3) ;

        HRESULT Point3Anim ([in] IDANumber * x_0, [in] IDANumber * y_1, [in] IDANumber * z_2, [out, retval] IDAPoint3 * * ret_3) ;

        HRESULT Point3 ([in] double x_0, [in] double y_1, [in] double z_2, [out, retval] IDAPoint3 * * ret_3) ;

        HRESULT Vector3SphericalAnim ([in] IDANumber * xyAngle_0, [in] IDANumber * yzAngle_1, [in] IDANumber * radius_2, [out, retval] IDAVector3 * * ret_3) ;

        HRESULT Vector3Spherical ([in] double xyAngle_0, [in] double yzAngle_1, [in] double radius_2, [out, retval] IDAVector3 * * ret_3) ;

        HRESULT Point3SphericalAnim ([in] IDANumber * zxAngle_0, [in] IDANumber * xyAngle_1, [in] IDANumber * radius_2, [out, retval] IDAPoint3 * * ret_3) ;

        HRESULT Point3Spherical ([in] double zxAngle_0, [in] double xyAngle_1, [in] double radius_2, [out, retval] IDAPoint3 * * ret_3) ;

        HRESULT DotVector3 ([in] IDAVector3 * v_0, [in] IDAVector3 * u_1, [out, retval] IDANumber * * ret_2) ;

        HRESULT CrossVector3 ([in] IDAVector3 * v_0, [in] IDAVector3 * u_1, [out, retval] IDAVector3 * * ret_2) ;

        HRESULT NegVector3 ([in] IDAVector3 * v_0, [out, retval] IDAVector3 * * ret_1) ;

        HRESULT SubVector3 ([in] IDAVector3 * v1_0, [in] IDAVector3 * v2_1, [out, retval] IDAVector3 * * ret_2) ;

        HRESULT AddVector3 ([in] IDAVector3 * v1_0, [in] IDAVector3 * v2_1, [out, retval] IDAVector3 * * ret_2) ;

        HRESULT AddPoint3Vector ([in] IDAPoint3 * p_0, [in] IDAVector3 * v_1, [out, retval] IDAPoint3 * * ret_2) ;

        HRESULT SubPoint3Vector ([in] IDAPoint3 * p_0, [in] IDAVector3 * v_1, [out, retval] IDAPoint3 * * ret_2) ;

        HRESULT SubPoint3 ([in] IDAPoint3 * p1_0, [in] IDAPoint3 * p2_1, [out, retval] IDAVector3 * * ret_2) ;

        HRESULT DistancePoint3 ([in] IDAPoint3 * p_0, [in] IDAPoint3 * q_1, [out, retval] IDANumber * * ret_2) ;

        HRESULT DistanceSquaredPoint3 ([in] IDAPoint3 * p_0, [in] IDAPoint3 * q_1, [out, retval] IDANumber * * ret_2) ;

        [propget] HRESULT IdentityTransform3 ([out, retval] IDATransform3 * * ret_0) ;

        HRESULT Translate3Anim ([in] IDANumber * tx_0, [in] IDANumber * ty_1, [in] IDANumber * tz_2, [out, retval] IDATransform3 * * ret_3) ;

        HRESULT Translate3 ([in] double tx_0, [in] double ty_1, [in] double tz_2, [out, retval] IDATransform3 * * ret_3) ;

        HRESULT Translate3Rate ([in] double tx_0, [in] double ty_1, [in] double tz_2, [out, retval] IDATransform3 * * ret_3) ;

        HRESULT Translate3Vector ([in] IDAVector3 * delta_0, [out, retval] IDATransform3 * * ret_1) ;

        HRESULT Translate3Point ([in] IDAPoint3 * new_origin_0, [out, retval] IDATransform3 * * ret_1) ;

        HRESULT Scale3Anim ([in] IDANumber * x_0, [in] IDANumber * y_1, [in] IDANumber * z_2, [out, retval] IDATransform3 * * ret_3) ;

        HRESULT Scale3 ([in] double x_0, [in] double y_1, [in] double z_2, [out, retval] IDATransform3 * * ret_3) ;

        HRESULT Scale3Rate ([in] double x_0, [in] double y_1, [in] double z_2, [out, retval] IDATransform3 * * ret_3) ;

        HRESULT Scale3Vector ([in] IDAVector3 * scale_vec_0, [out, retval] IDATransform3 * * ret_1) ;

        HRESULT Scale3UniformAnim ([in] IDANumber * uniform_scale_0, [out, retval] IDATransform3 * * ret_1) ;

        HRESULT Scale3Uniform ([in] double uniform_scale_0, [out, retval] IDATransform3 * * ret_1) ;

        HRESULT Scale3UniformRate ([in] double uniform_scale_0, [out, retval] IDATransform3 * * ret_1) ;

        HRESULT Rotate3Anim ([in] IDAVector3 * axis_0, [in] IDANumber * angle_1, [out, retval] IDATransform3 * * ret_2) ;

        HRESULT Rotate3 ([in] IDAVector3 * axis_0, [in] double angle_1, [out, retval] IDATransform3 * * ret_2) ;

        HRESULT Rotate3Rate ([in] IDAVector3 * axis_0, [in] double angle_1, [out, retval] IDATransform3 * * ret_2) ;

        HRESULT Rotate3Degrees ([in] IDAVector3 * axis_0, [in] double angle_1, [out, retval] IDATransform3 * * ret_2) ;

        HRESULT Rotate3RateDegrees ([in] IDAVector3 * axis_0, [in] double angle_1, [out, retval] IDATransform3 * * ret_2) ;

        HRESULT XShear3Anim ([in] IDANumber * a_0, [in] IDANumber * b_1, [out, retval] IDATransform3 * * ret_2) ;

        HRESULT XShear3 ([in] double a_0, [in] double b_1, [out, retval] IDATransform3 * * ret_2) ;

        HRESULT XShear3Rate ([in] double a_0, [in] double b_1, [out, retval] IDATransform3 * * ret_2) ;

        HRESULT YShear3Anim ([in] IDANumber * c_0, [in] IDANumber * d_1, [out, retval] IDATransform3 * * ret_2) ;

        HRESULT YShear3 ([in] double c_0, [in] double d_1, [out, retval] IDATransform3 * * ret_2) ;

        HRESULT YShear3Rate ([in] double c_0, [in] double d_1, [out, retval] IDATransform3 * * ret_2) ;

        HRESULT ZShear3Anim ([in] IDANumber * e_0, [in] IDANumber * f_1, [out, retval] IDATransform3 * * ret_2) ;

        HRESULT ZShear3 ([in] double e_0, [in] double f_1, [out, retval] IDATransform3 * * ret_2) ;

        HRESULT ZShear3Rate ([in] double e_0, [in] double f_1, [out, retval] IDATransform3 * * ret_2) ;

        [restricted] HRESULT Transform4x4AnimEx ([in] LONG m_0size, [in,size_is(m_0size)] IDANumber * m_0[], [out, retval] IDATransform3 * * ret_1) ;

        HRESULT Transform4x4Anim ([in] VARIANT m_0, [out, retval] IDATransform3 * * ret_1) ;

        HRESULT Compose3 ([in] IDATransform3 * a_0, [in] IDATransform3 * b_1, [out, retval] IDATransform3 * * ret_2) ;

        [restricted] HRESULT Compose3ArrayEx ([in] LONG xfs_0size, [in,size_is(xfs_0size)] IDATransform3 * xfs_0[], [out, retval] IDATransform3 * * ret_1) ;

        HRESULT Compose3Array ([in] VARIANT xfs_0, [out, retval] IDATransform3 * * ret_1) ;

        HRESULT LookAtFrom ([in] IDAPoint3 * to_0, [in] IDAPoint3 * from_1, [in] IDAVector3 * up_2, [out, retval] IDATransform3 * * ret_3) ;

        [propget] HRESULT IdentityTransform2 ([out, retval] IDATransform2 * * ret_0) ;

        HRESULT Translate2Anim ([in] IDANumber * Tx_0, [in] IDANumber * Ty_1, [out, retval] IDATransform2 * * ret_2) ;

        HRESULT Translate2 ([in] double Tx_0, [in] double Ty_1, [out, retval] IDATransform2 * * ret_2) ;

        HRESULT Translate2Rate ([in] double Tx_0, [in] double Ty_1, [out, retval] IDATransform2 * * ret_2) ;

        HRESULT Translate2Vector ([in] IDAVector2 * delta_0, [out, retval] IDATransform2 * * ret_1) ;

        HRESULT Translate2Point ([in] IDAPoint2 * pos_0, [out, retval] IDATransform2 * * ret_1) ;

        HRESULT Scale2Anim ([in] IDANumber * x_0, [in] IDANumber * y_1, [out, retval] IDATransform2 * * ret_2) ;

        HRESULT Scale2 ([in] double x_0, [in] double y_1, [out, retval] IDATransform2 * * ret_2) ;

        HRESULT Scale2Rate ([in] double x_0, [in] double y_1, [out, retval] IDATransform2 * * ret_2) ;

        HRESULT Scale2Vector2 ([in] IDAVector2 * obsoleteMethod_0, [out, retval] IDATransform2 * * ret_1) ;

        HRESULT Scale2Vector ([in] IDAVector2 * scale_vec_0, [out, retval] IDATransform2 * * ret_1) ;

        HRESULT Scale2UniformAnim ([in] IDANumber * uniform_scale_0, [out, retval] IDATransform2 * * ret_1) ;

        HRESULT Scale2Uniform ([in] double uniform_scale_0, [out, retval] IDATransform2 * * ret_1) ;

        HRESULT Scale2UniformRate ([in] double uniform_scale_0, [out, retval] IDATransform2 * * ret_1) ;

        HRESULT Rotate2Anim ([in] IDANumber * angle_0, [out, retval] IDATransform2 * * ret_1) ;

        HRESULT Rotate2 ([in] double angle_0, [out, retval] IDATransform2 * * ret_1) ;

        HRESULT Rotate2Rate ([in] double angle_0, [out, retval] IDATransform2 * * ret_1) ;

        HRESULT Rotate2Degrees ([in] double angle_0, [out, retval] IDATransform2 * * ret_1) ;

        HRESULT Rotate2RateDegrees ([in] double angle_0, [out, retval] IDATransform2 * * ret_1) ;

        HRESULT XShear2Anim ([in] IDANumber * arg_0, [out, retval] IDATransform2 * * ret_1) ;

        HRESULT XShear2 ([in] double arg_0, [out, retval] IDATransform2 * * ret_1) ;

        HRESULT XShear2Rate ([in] double arg_0, [out, retval] IDATransform2 * * ret_1) ;

        HRESULT YShear2Anim ([in] IDANumber * arg_0, [out, retval] IDATransform2 * * ret_1) ;

        HRESULT YShear2 ([in] double arg_0, [out, retval] IDATransform2 * * ret_1) ;

        HRESULT YShear2Rate ([in] double arg_0, [out, retval] IDATransform2 * * ret_1) ;

        [restricted] HRESULT Transform3x2AnimEx ([in] LONG m_0size, [in,size_is(m_0size)] IDANumber * m_0[], [out, retval] IDATransform2 * * ret_1) ;

        HRESULT Transform3x2Anim ([in] VARIANT m_0, [out, retval] IDATransform2 * * ret_1) ;

        HRESULT Compose2 ([in] IDATransform2 * a_0, [in] IDATransform2 * b_1, [out, retval] IDATransform2 * * ret_2) ;

        [restricted] HRESULT Compose2ArrayEx ([in] LONG xfs_0size, [in,size_is(xfs_0size)] IDATransform2 * xfs_0[], [out, retval] IDATransform2 * * ret_1) ;

        HRESULT Compose2Array ([in] VARIANT xfs_0, [out, retval] IDATransform2 * * ret_1) ;

        // Obsoleted methods!!!
        [helpstring("Obsolete method: Use DATuple instead")]
        HRESULT     Tuple([in] VARIANT obsolete1,
                          [out, retval] IDATuple **obsolete2);

        [helpstring("Obsolete method: Use DAArray instead")]
        HRESULT     Array([in] VARIANT obsolete1,
                          [out, retval] IDAArray **obsolete2);

        [propget]
        HRESULT     AreBlockingImportsComplete([out, retval]
                                               VARIANT_BOOL *bComplete);
    }

    // ====================================
    // DAStatics object definition
    // ====================================

    [
        uuid(FA261CF0-C44E-11d1-9BE4-00C04FC2F51D),
        helpstring("DirectAnimation Statics2"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        hidden,
        dual
    ]
    interface IDA2Statics : IDAStatics
    {

        HRESULT     ImportDirect3DRMVisual([in] IUnknown *visual,
                                           [out, retval] IDAGeometry **bvr);

        // For the Ex version, this is assumed to *not* be through
        // scripting, so any IUnknown can be passed in as theXf.
        [restricted] HRESULT     ApplyDXTransformEx([in] IUnknown *theXf,
                                                    [in] LONG numInputs,
                                                    [in, size_is(numInputs)] IDABehavior **inputs,
                                                    [in] IDANumber *evaluator,
                                                    [out, retval] IDADXTransformResult **ppResult);

        // For use through scripting: Can only pass in transforms that
        // support IDispatch.
        HRESULT     ApplyDXTransform([in] VARIANT varXf,
                                     [in] VARIANT inputs,
                                     [in] VARIANT evaluator,
                                     [out, retval] IDADXTransformResult **ppResult);

        HRESULT     ModifiableNumber([in] double initVal,
                                     [out, retval] IDANumber **ppResult);
        HRESULT     ModifiableString([in] BSTR initVal,
                                     [out, retval] IDAString **ppResult);

        enum { DAARRAY_CHANGEABLE = 0x00000001 } ;

        [restricted] HRESULT     DAArrayEx2([in] LONG s,
                                            [in, size_is(s)] IDABehavior *pBvrs[],
                                            [in] DWORD dwFlags,
                                            [out, retval] IDAArray **bvr);

        HRESULT     DAArray2([in] VARIANT bvrs,
                             [in] DWORD dwFlags,
                             [out, retval] IDAArray **bvr);

        HRESULT     ImportGeometryWrapped([in] BSTR url,
                                          [in] LONG wrapType,
                                          [in] double originX,
                                          [in] double originY,
                                          [in] double originZ,
                                          [in] double zAxisX,
                                          [in] double zAxisY,
                                          [in] double zAxisZ,
                                          [in] double yAxisX,
                                          [in] double yAxisY,
                                          [in] double yAxisZ,
                                          [in] double texOriginX,
                                          [in] double texOriginY,
                                          [in] double texScaleX,
                                          [in] double texScaleY,
                                          [in] DWORD flags,
                                          [out, retval] IDAGeometry **ppGeometry);

        HRESULT     ImportGeometryWrappedAsync([in] BSTR url,
                                               [in] LONG wrapType,
                                               [in] double originX,
                                               [in] double originY,
                                               [in] double originZ,
                                               [in] double zAxisX,
                                               [in] double zAxisY,
                                               [in] double zAxisZ,
                                               [in] double yAxisX,
                                               [in] double yAxisY,
                                               [in] double yAxisZ,
                                               [in] double texOriginX,
                                               [in] double texOriginY,
                                               [in] double texScaleX,
                                               [in] double texScaleY,
                                               [in] DWORD flags,
                                               [in] IDAGeometry *pGeoStandIn,
                                               [out, retval] IDAImportationResult **ppResult);

        HRESULT     ImportDirect3DRMVisualWrapped([in] IUnknown *visual,
                                                  [in] LONG wrapType,
                                                  [in] double originX,
                                                  [in] double originY,
                                                  [in] double originZ,
                                                  [in] double zAxisX,
                                                  [in] double zAxisY,
                                                  [in] double zAxisZ,
                                                  [in] double yAxisX,
                                                  [in] double yAxisY,
                                                  [in] double yAxisZ,
                                                  [in] double texOriginX,
                                                  [in] double texOriginY,
                                                  [in] double texScaleX,
                                                  [in] double texScaleY,
                                                  [in] DWORD flags,
                                                  [out, retval] IDAGeometry **bvr);

        HRESULT UntilNotifyScript ([in] IDABehavior * b0_0, [in] IDAEvent * event_1, [in] BSTR scriptlet_2, [out, retval] IDABehavior * * ret_3) ;

        [propget] HRESULT ViewFrameRate ([out, retval] IDANumber * * ret_0) ;

        [restricted] HRESULT UnionMontageArrayEx ([in] LONG mtgs_0size, [in,size_is(mtgs_0size)] IDAMontage * mtgs_0[], [out, retval] IDAMontage * * ret_1) ;

        HRESULT UnionMontageArray ([in] VARIANT mtgs_0, [out, retval] IDAMontage * * ret_1) ;

        [propget] HRESULT ModifiableBehaviorFlags([out, retval] DWORD * dwFlags);
        [propput] HRESULT ModifiableBehaviorFlags([in] DWORD dwFlags);
        [propget] HRESULT EmptyColor ([out, retval] IDAColor * * ret_0) ;
    }


    // ====================================
    // IDA3Statics Interface Definition
    // ====================================

    [
        uuid(6e0b5fc4-4d1e-11d2-aa53-00c04fc2f60f),
        helpstring("DirectAnimation Statics3"),
        local,
        object,
        pointer_default(unique),
        oleautomation,
        hidden,
        dual
    ]
    interface IDA3Statics : IDA2Statics
    {
        // these streaming interfaces are temporary and will be replaced
        // by Kevin's new import api
        HRESULT ImportSoundStream([in] BSTR url,
                            [out, retval] IDAImportationResult **ppResult);

        HRESULT ImportMovieStream([in] BSTR url,
                            [out, retval] IDAImportationResult **ppResult);

        [restricted] HRESULT SequenceArrayEx ([in] LONG sz, [in,size_is(sz)] IDABehavior * bvrs_0[], [out, retval] IDABehavior * * ret_1);

        HRESULT SequenceArray ([in] VARIANT bvrs_0, [out, retval] IDABehavior * * ret_1) ;

        [propget] HRESULT ViewTimeDelta ([out, retval] IDANumber * * ret_0) ;

        HRESULT TriMesh   ([in] int      nTriangles,
                           [in] VARIANT  positions,
                           [in] VARIANT  normals,
                           [in] VARIANT  UVs,
                           [in] VARIANT  indices,
                           [out, retval] IDAGeometry **result);

        [restricted] HRESULT TriMeshEx ([in]                      int   nTriangles,
								        [in]                      int   nPositions,
                                        [in, size_is(nPositions)] float positions[],
                                        [in]                      int   nNormals,
                                        [in, size_is(nNormals)]   float normals[],
                                        [in]                      int   nUVs,
                                        [in, size_is(nUVs)]       float UVs[],
                                        [in]                      int   nIndices,
                                        [in, size_is(nIndices)]   int   indices[],
                                        [out, retval]             IDAGeometry **result);

        HRESULT   RadialGradientMulticolor    ([in] VARIANT offsets,
                                               [in] VARIANT colors,
                                               [out, retval] IDAImage **result) ;

        [restricted] HRESULT   RadialGradientMulticolorEx ([in] int nOffsets,
                                                           [in, size_is(nOffsets)] IDANumber *offsets[],
                                                           [in] int nColors,
                                                           [in, size_is(nColors)] IDAColor *colors[],
                                                           [out, retval] IDAImage **result) ;


        HRESULT   LinearGradientMulticolor    ([in] VARIANT offsets,
                                               [in] VARIANT colors,
                                               [out, retval] IDAImage **result) ;

        [restricted] HRESULT   LinearGradientMulticolorEx ([in] int nOffsets,
                                                           [in, size_is(nOffsets)] IDANumber *offsets[],
                                                           [in] int nColors,
                                                           [in, size_is(nColors)] IDAColor *colors[],
                                                           [out, retval] IDAImage **result) ;

    }

    // coclass for DAStatics objects
    [
        uuid(542FB453-5003-11cf-92A2-00AA00B8A733),
        helpstring("DirectAnimation Statics Object"),
        appobject
    ]
    coclass DAStatics
    {
        [default]         interface IDA3Statics;
    };

    typedef enum {DAMultimediaTimer = 0, DAContainerTimer = 1, DAWMTimer = 2} DA_TIMER_SOURCE;

    //
    // Control classes
    //

    [
        object,
        uuid(0E41257B-812D-11D0-9B4A-00C04FC2F51D),
        dual,
        helpstring("DirectAnimation ActiveX viewer interface"),
        pointer_default(unique)
    ]
    interface IDAViewerControl : IDispatch
    {
        [propget, helpstring("property updateInterval")]
        HRESULT UpdateInterval([out, retval] double *pVal);

        [propput, helpstring("property updateInterval")]
        HRESULT UpdateInterval([in] double newVal);

        [propget, helpstring("property View")]
        HRESULT View([out, retval] IDAView **ppView);

        [propput, helpstring("property View")]
        HRESULT View([in] IDAView *pView);

        [propget, helpstring("property Image")]
        HRESULT Image([out, retval] IDAImage **ppImage);

        [propput, helpstring("property Image")]
        HRESULT Image([in] IDAImage *pImage);

        [propget, helpstring("property BackgroundImage")]
        HRESULT BackgroundImage([out, retval] IDAImage **ppImage);

        [propput, helpstring("property BackgroundImage")]
        HRESULT BackgroundImage([in] IDAImage *pImage);

        [propget, helpstring("property Sound")]
        HRESULT Sound([out, retval] IDASound **ppSound);

        [propput, helpstring("property Sound")]
        HRESULT Sound([in] IDASound *pSound);

        [propget, helpstring("property PixelLibrary")]
        HRESULT PixelLibrary([out, retval] IDAStatics **ppStatics);

        [propget, helpstring("property MeterLibrary")]
        HRESULT MeterLibrary([out, retval] IDAStatics **ppStatics);

        [helpstring("Add a behavior to run at start time")]
        HRESULT AddBehaviorToRun([in] IDABehavior *pBehavior);

        [helpstring("Start the model")]
        HRESULT Start();

        // Note that the DAViewerControl interface is hardcoded for a
        // single input image.  Will need to generalize as more
        // general clients come on line.
        [hidden, propget, helpstring("inputImage property")]
        HRESULT InputImage([out, retval] IDAImage **pVal);

        [propget]
        HRESULT OpaqueForHitDetect([out, retval] VARIANT_BOOL *b);

        [propput]
        HRESULT OpaqueForHitDetect([in] VARIANT_BOOL b);

        [propget]
        HRESULT TimerSource([out, retval]  DA_TIMER_SOURCE *ts);

        [propput]
        HRESULT TimerSource([in] DA_TIMER_SOURCE ts);

        [helpstring("Add a error handling routine")]
        HRESULT RegisterErrorHandler([in] BSTR scriptlet);

    };


    [
        object,
        uuid(BA8B033E-1E91-11d1-8809-00C04FC29D46),
        dual,
        helpstring("DirectAnimation ActiveX windowed viewer interface"),
        pointer_default(unique)
    ]
    interface IDAViewerControlWindowed : IDAViewerControl
    {
    };

    /////  Version 2 viewer interfaces

    [
        object,
        uuid(F3E1B522-D8A6-11d1-9BE5-00C04FC2F51D),
        dual,
        pointer_default(unique)
    ]
    interface IDA2ViewerControl : IDAViewerControl
    {
        HRESULT SetPreference([in] BSTR pref, [in] VARIANT val);
        HRESULT GetPreference([in] BSTR pref, [out, retval] VARIANT *pVal);
    };

    [
        object,
        uuid(A3034056-EC1C-11d1-9BE8-00C04FC2F51D),
        dual,
        pointer_default(unique)
    ]
    interface IDA2ViewerControlWindowed : IDAViewerControlWindowed
    {
        
        HRESULT SetPreference([in] BSTR pref, [in] VARIANT val);
        HRESULT GetPreference([in] BSTR pref, [out, retval] VARIANT *pVal);
    };


    [
        object,
        uuid(09509866-79AA-11d2-8BF5-00C04FC2F51D),
        dual,
        pointer_default(unique)
    ]
    interface IDA3ViewerControl : IDA2ViewerControl
    {
        HRESULT Stop();
        HRESULT Pause();
        HRESULT Resume();
        HRESULT Tick();
    };

    [
        object,
        uuid(09509867-79AA-11d2-8BF5-00C04FC2F51D),
        dual,
        pointer_default(unique)
    ]
    interface IDA3ViewerControlWindowed : IDA2ViewerControlWindowed
    {
        
        HRESULT Stop();
        HRESULT Pause();
        HRESULT Resume();
        HRESULT Tick();        
    };

    [
        uuid(3584F274-61EA-11d2-8BD9-00C04FC2F51D),
		helpstring ("Direct Animation ActiveX Control Events")
    ]
    dispinterface _IDAViewerControlEvents
    {
	  properties:
	  methods:
        [id(DISPID_DANIMEVENT_START)]        void Start();
		[id(DISPID_DANIMEVENT_MOUSEUP)]      void MouseUp([in] long Button, [in] long KeyFlags, [in] long x, [in] long y);
		[id(DISPID_DANIMEVENT_MOUSEDOWN)]    void MouseDown([in] long Button, [in] long KeyFlags, [in] long x, [in] long y);
		[id(DISPID_DANIMEVENT_MOUSEMOVE)]    void MouseMove([in] long Button, [in] long KeyFlags, [in] long x, [in] long y);
		[id(DISPID_DANIMEVENT_CLICK)]        void Click();
		[id(DISPID_DANIMEVENT_KEYPRESS)]     void KeyPress([in] long KeyAscii);
		[id(DISPID_DANIMEVENT_KEYUP)]        void KeyUp([in] long KeyCode, [in] long KeyData);
		[id(DISPID_DANIMEVENT_KEYDOWN)]      void KeyDown([in] long KeyCode, [in] long KeyData);
		[id(DISPID_DANIMEVENT_ERROR)]        void Error([in] long HResult, [in] BSTR ErrorString);
        [id(DISPID_DANIMEVENT_STOP)]         void Stop();
        [id(DISPID_DANIMEVENT_PAUSE)]        void Pause();
        [id(DISPID_DANIMEVENT_RESUME)]       void Resume();


    };

// ===========================================================================
//                  C O N T R O L   C O C L A S S E S
// ===========================================================================


    [
        uuid(B6FFC24C-7E13-11D0-9B47-00C04FC2F51D),
        helpstring("DirectAnimation ActiveX windowless viewer class"),
    ]
    coclass DAViewerControl
    {
        [default] interface IDA3ViewerControl;
        [default, source] dispinterface _IDAViewerControlEvents;
    };

    [
        uuid(69AD90EF-1C20-11d1-8801-00C04FC29D46),
        helpstring("DirectAnimation ActiveX windowed viewer class"),
    ]
    coclass DAViewerControlWindowed
    {
        [default] interface IDA3ViewerControlWindowed;
        [default, source] dispinterface _IDAViewerControlEvents;
    };


    //
    // coclass for CDABoolean objects
    //

    [
        uuid(C46C1BC1-3C52-11d0-9200-848C1D000000),
        helpstring("DirectAnimation Boolean Behavior Object")
    ]
    coclass DABoolean
    {
        [default]         interface IDABoolean;
    };


    //
    // coclass for CDACamera objects
    //

    [
        uuid(C46C1BE2-3C52-11d0-9200-848C1D000000),
        helpstring("DirectAnimation Camera Behavior Object")
    ]
    coclass DACamera
    {
        [default]         interface IDACamera;
    };


    //
    // coclass for CDAColor objects
    //

    [
        uuid(C46C1BC6-3C52-11d0-9200-848C1D000000),
        helpstring("DirectAnimation Color Behavior Object")
    ]
    coclass DAColor
    {
        [default]         interface IDA2Color;
    };


    //
    // coclass for CDAGeometry objects
    //

    [
        uuid(C46C1BE0-3C52-11d0-9200-848C1D000000),
        helpstring("DirectAnimation Geometry Behavior Object")
    ]
    coclass DAGeometry
    {
        [default]         interface IDA3Geometry;
    };


    //
    // coclass for CDAImage objects
    //

    [
        uuid(C46C1BD4-3C52-11d0-9200-848C1D000000),
        helpstring("DirectAnimation Image Behavior Object")
    ]
    coclass DAImage
    {
        [default]         interface IDA3Image;
    };


    //
    // coclass for CDAMatte objects
    //

    [
        uuid(C46C1BD2-3C52-11d0-9200-848C1D000000),
        helpstring("DirectAnimation Matte Behavior Object")
    ]
    coclass DAMatte
    {
        [default]         interface IDAMatte;
    };


    //
    // coclass for CDAMicrophone objects
    //

    [
        uuid(C46C1BE6-3C52-11d0-9200-848C1D000000),
        helpstring("DirectAnimation Microphone Behavior Object")
    ]
    coclass DAMicrophone
    {
        [default]         interface IDAMicrophone;
    };


    //
    // coclass for CDAMontage objects
    //

    [
        uuid(C46C1BD6-3C52-11d0-9200-848C1D000000),
        helpstring("DirectAnimation Montage Behavior Object")
    ]
    coclass DAMontage
    {
        [default]         interface IDAMontage;
    };


    //
    // coclass for CDANumber objects
    //

    [
        uuid(9CDE7341-3C20-11d0-A330-00AA00B92C03),
        helpstring("DirectAnimation Number Behavior Object")
    ]
    coclass DANumber
    {
        [default]         interface IDANumber;
    };


    //
    // coclass for CDAPath2 objects
    //

    [
        uuid(C46C1BD0-3C52-11d0-9200-848C1D000000),
        helpstring("DirectAnimation Path2 Behavior Object")
    ]
    coclass DAPath2
    {
        [default]         interface IDAPath2;
    };


    //
    // coclass for CDAPoint2 objects
    //

    [
        uuid(C46C1BC8-3C52-11d0-9200-848C1D000000),
        helpstring("DirectAnimation Point2 Behavior Object")
    ]
    coclass DAPoint2
    {
        [default]         interface IDAPoint2;
    };


    //
    // coclass for CDAPoint3 objects
    //

    [
        uuid(C46C1BD8-3C52-11d0-9200-848C1D000000),
        helpstring("DirectAnimation Point3 Behavior Object")
    ]
    coclass DAPoint3
    {
        [default]         interface IDAPoint3;
    };


    //
    // coclass for CDASound objects
    //

    [
        uuid(C46C1BE4-3C52-11d0-9200-848C1D000000),
        helpstring("DirectAnimation Sound Behavior Object")
    ]
    coclass DASound
    {
        [default]         interface IDASound;
    };


    //
    // coclass for CDAString objects
    //

    [
        uuid(C46C1BC4-3C52-11d0-9200-848C1D000000),
        helpstring("DirectAnimation String Behavior Object")
    ]
    coclass DAString
    {
        [default]         interface IDAString;
    };


    //
    // coclass for CDATransform2 objects
    //

    [
        uuid(C46C1BCC-3C52-11d0-9200-848C1D000000),
        helpstring("DirectAnimation Transform2 Behavior Object")
    ]
    coclass DATransform2
    {
        [default]         interface IDATransform2;
    };


    //
    // coclass for CDATransform3 objects
    //

    [
        uuid(C46C1BDC-3C52-11d0-9200-848C1D000000),
        helpstring("DirectAnimation Transform3 Behavior Object")
    ]
    coclass DATransform3
    {
        [default]         interface IDATransform3;
    };


    //
    // coclass for CDAVector2 objects
    //

    [
        uuid(C46C1BCA-3C52-11d0-9200-848C1D000000),
        helpstring("DirectAnimation Vector2 Behavior Object")
    ]
    coclass DAVector2
    {
        [default]         interface IDAVector2;
    };


    //
    // coclass for CDAVector3 objects
    //

    [
        uuid(C46C1BDA-3C52-11d0-9200-848C1D000000),
        helpstring("DirectAnimation Vector3 Behavior Object")
    ]
    coclass DAVector3
    {
        [default]         interface IDAVector3;
    };


    //
    // coclass for CDAFontStyle objects
    //

    [
        uuid(25B0F91C-D23D-11d0-9B85-00C04FC2F51D),
        helpstring("DirectAnimation FontStyle Behavior Object")
    ]
    coclass DAFontStyle
    {
        [default]         interface IDA2FontStyle;
    };


    //
    // coclass for CDALineStyle objects
    //

    [
        uuid(C46C1BF2-3C52-11d0-9200-848C1D000000),
        helpstring("DirectAnimation LineStyle Behavior Object")
    ]
    coclass DALineStyle
    {
        [default]         interface IDA2LineStyle;
    };


    //
    // coclass for CDAEndStyle objects
    //

    [
        uuid(C46C1BEC-3C52-11d0-9200-848C1D000000),
        helpstring("DirectAnimation EndStyle Behavior Object")
    ]
    coclass DAEndStyle
    {
        [default]         interface IDAEndStyle;
    };


    //
    // coclass for CDAJoinStyle objects
    //

    [
        uuid(C46C1BEE-3C52-11d0-9200-848C1D000000),
        helpstring("DirectAnimation JoinStyle Behavior Object")
    ]
    coclass DAJoinStyle
    {
        [default]         interface IDAJoinStyle;
    };


    //
    // coclass for CDADashStyle objects
    //

    [
        uuid(C46C1BF0-3C52-11d0-9200-848C1D000000),
        helpstring("DirectAnimation DashStyle Behavior Object")
    ]
    coclass DADashStyle
    {
        [default]         interface IDADashStyle;
    };


    //
    // coclass for CDABbox2 objects
    //

    [
        uuid(C46C1BCE-3C52-11d0-9200-848C1D000000),
        helpstring("DirectAnimation Bbox2 Behavior Object")
    ]
    coclass DABbox2
    {
        [default]         interface IDABbox2;
    };


    //
    // coclass for CDABbox3 objects
    //

    [
        uuid(C46C1BDE-3C52-11d0-9200-848C1D000000),
        helpstring("DirectAnimation Bbox3 Behavior Object")
    ]
    coclass DABbox3
    {
        [default]         interface IDABbox3;
    };


    //
    // coclass for CDAPair objects
    //

    [
        uuid(C46C1BF4-3C52-11d0-9200-848C1D000000),
        helpstring("DirectAnimation Pair Behavior Object")
    ]
    coclass DAPair
    {
        [default]         interface IDAPair;
    };


    //
    // coclass for CDAEvent objects
    //

    [
        uuid(50B4791F-4731-11d0-8912-00C04FC2A0CA),
        helpstring("DirectAnimation Event Behavior Object")
    ]
    coclass DAEvent
    {
        [default]         interface IDA2Event;
    };


    //
    // coclass for CDAArray objects
    //

    [
        uuid(D17506C3-6B26-11d0-8914-00C04FC2A0CA),
        helpstring("DirectAnimation Array Behavior Object")
    ]
    coclass DAArray
    {
        [default]         interface IDA3Array;
    };


    //
    // coclass for CDATuple objects
    //

    [
        uuid(5DFB2651-9668-11d0-B17B-00C04FC2A0CA),
        helpstring("DirectAnimation Tuple Behavior Object")
    ]
    coclass DATuple
    {
        [default]         interface IDATuple;
    };


    //
    // coclass for CDAUserData objects
    //

    [
        uuid(AF868304-AB0B-11d0-876A-00C04FC29D46),
        helpstring("DirectAnimation Userdata Behavior Object")
    ]
    coclass DAUserData
    {
        [default]         interface IDAUserData;
    };




    // These are provided strictly for backwards compatability, and
    // shouldn't be used in new applications.

    [
        uuid(BCBB1F75-E384-11d0-9B99-00C04FC2F51D),
        helpstring("OBSOLETE: DirectAnimation ImportationResult Object")
    ]
    coclass DAImportationResult
    {
        [default]         interface IDAImportationResult;
    };

    [
        uuid(BCBB1F74-E384-11d0-9B99-00C04FC2F51D),
        helpstring("OBSOLETE: DirectAnimation PickableResult Object")
    ]
    coclass DAPickableResult
    {
        [default]         interface IDAPickableResult;
    };
}
